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在图像上动态画一条线? [提供的代码,无法找出错误]

如何绘制透明多边形?

openCV:从矩阵绘制颜色图

如何在 R Plotly 中用颜色向量绘制一条线

Python,OpenCV鼠标事件进行矩形圆形的绘制(随机颜色随机半径)

如何解决 OpenCv 绘制轮廓错误