OpenCV:如何绘制一条颜色与其应绘制的表面相反的线?
Posted
技术标签:
【中文标题】OpenCV:如何绘制一条颜色与其应绘制的表面相反的线?【英文标题】:OpenCV: How to draw a line with colors that are inversed relatively to the surface it should be drawn on? 【发布时间】:2010-11-24 11:38:33 【问题描述】:所以我们有一个图像。我们想画一条必须看到的线。那么如何绘制一条相对于每个点应该绘制的表面颜色反转的线条呢?
【问题讨论】:
【参考方案1】:XOR 技巧有细微的不同。不过,它在视觉上并不是最明显的,只是因为它完全忽略了人眼的工作方式。例如,在浅灰色上,饱和的红色在视觉上非常明显。
您可能希望将颜色转换为 HSV 并检查饱和度 S。如果低(灰度),则绘制一个红色像素。如果饱和度高,则色调相当明显,白色或黑色像素会突出。如果原始像素具有高 V,则使用黑色 (V=0);如果原始像素的 V 值较低(深饱和色),则使用白色
您可以使用前面建议的 LineIterator 方法。
(顺便说一句,XOR 技巧也有很糟糕的情况。0x7F ^ 0xFF = 0x80。这很难看)
【讨论】:
如果你用 0x80 异或,字节正好改变 128。【参考方案2】:使用LineIterator 并手动异或每个像素的颜色值。
【讨论】:
【参考方案3】:这是我的想法,我不是 C++ 开发人员,但应该可以 将线条绘制成单独的图像,然后模仿反转混合模式......基本上,您需要在像素后面获得“负”/反转颜色,您可以通过从最大颜色值中减去线条下方的颜色来获得。
类似:
uint invert(uint topPixel, uint bottomPixel)
return (255 - bottomPixel);
不确定颜色是从 0 到 255 还是从 0.0 到 1.0,但希望这能说明这个想法。
【讨论】:
这不适用于中灰色,最好的选择是对这些值进行异或。以上是关于OpenCV:如何绘制一条颜色与其应绘制的表面相反的线?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用opencv在图像上动态画一条线? [提供的代码,无法找出错误]