用opencv如何将一个二值化图像反色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用opencv如何将一个二值化图像反色相关的知识,希望对你有一定的参考价值。

如下图:
如何将该图变为黑底白目标。我现在用的是Mat形式。希望能有具体的实现代码
万分着急,谢谢!
其实不光是这一个图,现在的情况是有的二值化图片的结果本来就是黑底白目标,
但有的二值化图就需要进行反色。
我要的是如何自动判断是否需要进行反色,如果需要,那么进行反色。上图在
二值化之前的图如下:

你想要的是这样的结果么?

Mat reverse(Mat src)

    Mat dst=src<100;

    return dst;


追问

代码中的100是什么啊

追答

  随便设置的一个阈值。具体的值和你图像的数据类型有关。

  例如:我用的数据类型是CV_8U,图像取值只有0和255两种可能。理论上阈值th可以选择(0,255)的任意值。dst=src<100等价如下代码

if(f<th)

    f=255;

else

    f=0;

  目标是将二值化图像翻转。

参考技术A 如果是C++的话,直接
Mat dst = 255 - src; // 这样就直接实现黑白转置了
也可以使用
THRESH_BINARY_INV代替THRESH_BINARY直接实现
参考技术B 二值图反色用逻辑运算中的非运算更快,dst=cv2.bitwise_not()dst
我是python 的opencv,其他语言也有非运算的
我之前也在找答案,很多人都用255去减每个像素值,这方法在我的机器上效率低下得恐怖。

python怎么用PIL模块处理BMP图像 二值化

遍历图片对象?可是怎么个遍历法呢?Pillow 提供了一个 .load() 方法,用来处理像素。图片嘛,当然是二维的,有宽和高的。

pixels = image.load()
for x in ramge(image.width):
for y in range(image.height):
pixsels[x, y] = 255 if pixsels[x, y] > 125 else 0

当然了,只是最简单的二值化的话,直接 image.convert('1') 就可以了 :-)
参考技术A Pillow 提供了一个 .load() 方法,用来处理像素。图片嘛,当然是二维的,有宽和高的。

pixels = image.load()
for x in ramge(image.width):
for y in range(image.height):
pixsels[x, y] = 255 if pixsels[x, y] > 125 else 0

当然了,只是最简单的二值化的话,直接 image.convert('1') 就可以了 :-)
参考技术B 遍历图片对象?可是怎么个遍历法呢?Pillow 提供了一个 .load() 方法,用来处理像素。图片嘛,当然是二维的,有宽和高的。

pixels = image.load()
for x in ramge(image.width):
for y in range(image.height):
pixsels[x, y] = 255 if pixsels[x, y] > 125 else 0
当然了,只是最简单的二值化的话,直接 image.convert('1') 就可以了 :-)
参考技术C 遍历图片对象?可是怎么个遍历法呢?Pillow 提供了一个 .load() 方法,用来处理像素。图片嘛,当然是二维的,有宽和高的。

pixels = image.load()
for x in ramge(image.width):
for y in range(image.height):
pixsels[x, y] = 255 if pixsels[x, y] > 125 else 0

当然了,只是最简单的二值化的话,直接 image.convert('1') 就可以了 :-)

以上是关于用opencv如何将一个二值化图像反色的主要内容,如果未能解决你的问题,请参考以下文章

为啥用二值化处理图像之后,还会有其他的灰度值,尤其是在一些边缘的位置。比如opencv里的cvThreshold

怎样用opencv语句求二值化图像总的灰度值

opencv 我想给分割出来的数字二值化图片去噪。请问可以用啥方式?

opencv中怎么获取二值化图像的每个像素点的值

对二值化图像的选定区域内的目标彩图的物体颜色进行识别(RGB)并输出,用opencv怎么编写源代码?

python-opencv 图像二值化,自适应阈值处理