C++ OpenCV:如何绘制一条与应该绘制的表面颜色相反的线?

C++ OpenCV:如何绘制一条与应该绘制的表面颜色相反的线?,c++,c,drawing,opencv,lines,C++,C,Drawing,Opencv,Lines,所以我们有一个图像。我们想画一条线,这条线一定要被看到。那么,如何画一条颜色相对倒置的线条,它应该在每个点上绘制? < P>这是从我的头顶开始的,我不是C++的DEV,但是应该是可能的。 要将线条绘制成单独的图像,然后模拟反转混合模式……基本上,您需要获得像素后面的“负”色/反转色,这是通过从最大颜色值中减去线条下方的颜色得到的 比如: uint invert(uint topPixel, uint bottomPixel) { return (255 - bottomP

所以我们有一个图像。我们想画一条线,这条线一定要被看到。那么,如何画一条颜色相对倒置的线条,它应该在每个点上绘制?

< P>这是从我的头顶开始的,我不是C++的DEV,但是应该是可能的。 要将线条绘制成单独的图像,然后模拟反转混合模式……基本上,您需要获得像素后面的“负”色/反转色,这是通过从最大颜色值中减去线条下方的颜色得到的

比如:

uint invert(uint topPixel, uint bottomPixel) {
            return (255 - bottomPixel);
}

不确定颜色是从0到255还是从0到1,但希望这说明了这个想法。

< P>这是我的头顶,我不是C++开发人员,但应该是可能的。 要将线条绘制成单独的图像,然后模拟反转混合模式……基本上,您需要获得像素后面的“负”色/反转色,这是通过从最大颜色值中减去线条下方的颜色得到的

比如:

uint invert(uint topPixel, uint bottomPixel) {
            return (255 - bottomPixel);
}

不确定颜色是从0到255还是从0.0到1.0,但希望这能说明这一点。

手动使用和异或每个像素的颜色值

手动对每个像素的颜色值使用a和XOR

异或技巧有细微的不同。不过,这并不是视觉上最清晰的,因为它完全忽略了人眼的工作方式。例如,在浅灰色上,饱和红色在视觉上非常明显

您可能需要将颜色转换为HSV并检查饱和度。如果饱和度较低(灰度),则绘制一个红色像素。如果饱和度高,则色调非常明显,白色或黑色像素会突出。如果原始像素具有高V,则使用黑色(V=0);如果原始像素具有低V(暗饱和颜色),则使用白色

您可以使用前面建议的LineIterator方法


(顺便说一句,异或技巧也有非常糟糕的情况。0x7F^0xFF=0x80。这很难看出)

异或技巧与此略有不同。不过,这并不是视觉上最清晰的,因为它完全忽略了人眼的工作方式。例如,在浅灰色上,饱和红色在视觉上非常明显

您可能需要将颜色转换为HSV并检查饱和度。如果饱和度较低(灰度),则绘制一个红色像素。如果饱和度高,则色调非常明显,白色或黑色像素会突出。如果原始像素具有高V,则使用黑色(V=0);如果原始像素具有低V(暗饱和颜色),则使用白色

您可以使用前面建议的LineIterator方法


(顺便说一句,XOR技巧也有很糟糕的情况。0x7F^0xFF=0x80。这很难看出)

这对中灰色不起作用,最好的选择是对值进行XOR。这对中灰色不起作用,最好的选择是对值进行XOR。如果用0x80进行XOR,字节会精确更改128。如果用0x80进行XOR,字节的变化正好是128。