【发布时间】:2010-11-24 11:38:33
【问题描述】:
所以我们有一个图像。我们想画一条必须看到的线。那么如何绘制一条相对于每个点应该绘制的表面颜色反转的线条呢?
【问题讨论】:
标签: c++ c drawing opencv lines
所以我们有一个图像。我们想画一条必须看到的线。那么如何绘制一条相对于每个点应该绘制的表面颜色反转的线条呢?
【问题讨论】:
标签: c++ c drawing opencv lines
XOR 技巧有细微的不同。不过,它在视觉上并不是最明显的,只是因为它完全忽略了人眼的工作方式。例如,在浅灰色上,饱和的红色在视觉上非常明显。
您可能希望将颜色转换为 HSV 并检查饱和度 S。如果低(灰度),则绘制一个红色像素。如果饱和度高,则色调相当明显,白色或黑色像素会突出。如果原始像素具有高 V,则使用黑色 (V=0);如果原始像素的 V 值较低(深饱和色),则使用白色
您可以使用前面建议的 LineIterator 方法。
(顺便说一句,XOR 技巧也有很糟糕的情况。0x7F ^ 0xFF = 0x80。这很难看)
【讨论】:
使用LineIterator 并手动异或每个像素的颜色值。
【讨论】:
这是我的想法,我不是 C++ 开发人员,但应该可以 将线条绘制成单独的图像,然后模仿反转混合模式......基本上,您需要在像素后面获得“负”/反转颜色,您可以通过从最大颜色值中减去线条下方的颜色来获得。
类似:
uint invert(uint topPixel, uint bottomPixel) {
return (255 - bottomPixel);
}
不确定颜色是从 0 到 255 还是从 0.0 到 1.0,但希望这能说明这个想法。
【讨论】: