去皮卡多 发表于 2025-1-16 11:22:36

python学opencv|读取图像(三十五)反阈值处置惩罚

【1】引言

前序已经学习了对灰度图像和彩色图像的阈值处置惩罚,对图像的RGB通道强行赋值,相关链接为:
python学opencv|读取图像(三十三)阈值处置惩罚-灰度图像-CSDN博客
python学opencv|读取图像(三十四)阈值处置惩罚-彩色图像-CSDN博客 
在应用上述阈值处置惩罚的过程中,我们调用的函数是cv2.threshold(),该函数的官网链接为:
OpenCV: Miscellaneous Image Transformations
在官网,我们会看到对cv2.threshold()函数的处置惩罚中,有一个type参数,这是我们之前未深入探讨的地方,今天我们就着重研究一下。
https://i-blog.csdnimg.cn/direct/ea89eaedbcaf4eaea98abeb9c9836310.png
图1   
【2】阈值和反阈值处置惩罚

点击图1中type对应的ThresholdTypes,会链接到新的网页:
OpenCV: Miscellaneous Image Transformations
在这里,我们主要关注两个type:
https://i-blog.csdnimg.cn/direct/8f37b137cf0d4277a4adb5d48443b133.png
图2
图2表现了两个type:cv.THRESH_BINARY和cv.THRESH_BINARY_INV,这两个是完全过来的,第一个只要实际值大于阈值开关,就直接赋最大值,第二个则是不超过阈值开关时赋最大值。
cv.THRESH_BINARY在之前的两篇文章中,一直被cv2.threshold()调用。所以,假如做反阈值处置惩罚,cv2.threshold()函数就要调用cv.THRESH_BINARY_INV。
【3】代码测试

代码测试直接使用前两篇使用的代码,只须要修改cv2.threshold()函数,使其从调用cv.THRESH_BINARY该换为调用cv.THRESH_BINARY_INV即可。
【3.1】灰度图像

灰度图像反阈值处置惩罚使用的完整代码为:
import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块

# 读取图片
src = cv.imread('scasrcf.png',0)
dst=src#输出图像


t1,dst1=cv.threshold(src,58,158,cv.THRESH_BINARY_INV) #阈值开关58,阈值上限158
t2,dst2=cv.threshold(src,100,255,cv.THRESH_BINARY_INV) #阈值开关100,阈值上限255
t3,dst3=cv.threshold(src,0,255,cv.THRESH_BINARY_INV) #阈值开关0,阈值上限255

#展示图像
cv.imshow('srcf', dst)# 在屏幕展示效果
cv.imshow('srcft1', dst1)# 在屏幕展示效果
cv.imshow('srcft2', dst2)# 在屏幕展示效果
cv.imshow('srcft3', dst3)# 在屏幕展示效果
print("dst像素数为位置处的BGR=", dst)# 获取像素数为位置处的BGR
print("dst1像素数为位置处的BGR=", dst1)# 获取像素数为位置处的BGR
print("dst2像素数为位置处的BGR=", dst2)# 获取像素数为位置处的BGR
print("dst3像素数为位置处的BGR=", dst3)# 获取像素数为位置处的BGR

#保存图像
cv.imwrite('srcf-m-V.png', dst)# 保存图像
cv.imwrite('srcf-m-t1-V.png', dst1)# 保存图像
cv.imwrite('srcf-m-t2-V.png', dst2)# 保存图像
cv.imwrite('srcf-m-t3-V.png', dst3)# 保存图像
cv.waitKey()# 图像不会自动关闭
cv.destroyAllWindows()# 释放所有窗口
可以看到,阈值处置惩罚函数全部调用了 cv.THRESH_BINARY_INV:
   t1,dst1=cv.threshold(src,58,158,cv.THRESH_BINARY_INV) #阈值开关58,阈值上限158
t2,dst2=cv.threshold(src,100,255,cv.THRESH_BINARY_INV) #阈值开关100,阈值上限255
t3,dst3=cv.threshold(src,0,255,cv.THRESH_BINARY_INV) #阈值开关0,阈值上限255
本次使用的原图是:
https://i-blog.csdnimg.cn/direct/49abcd2b91524629b8b63415ccc68914.png
图2
得到的未做阈值处置惩罚的灰度图为:
https://i-blog.csdnimg.cn/direct/98da917c81be4d1eb1f7a7c6154cd5f5.png
图3 未做阈值处置惩罚的灰度图
此时经过阈值函数处置惩罚,得到的图像分别为:
https://i-blog.csdnimg.cn/direct/b693dcf8cc73400487213637724d0866.png
图4 阈值开关58,阈值上限158,反阈值处置惩罚
https://i-blog.csdnimg.cn/direct/9daa5f7af6eb4772ab6da2dbc4dc9b70.png
图5 阈值开关100,阈值上限255,反阈值处置惩罚
https://i-blog.csdnimg.cn/direct/2eacbd762b74499aab87c7bc40f8781f.png
图6 阈值开关0,阈值上限255,反阈值处置惩罚
经过此次反阈值处置惩罚,会发现:原图亮的地方变暗了,暗的地方变亮了。
假如仔细核对特定点的BGR值,也会发现这个结论:
https://i-blog.csdnimg.cn/direct/51de408c955c46a7b6df88059d6a98fd.png
图7
【3.2】彩色图像

彩色图像反阈值处置惩罚使用的完整代码为:
import cv2 as cv # 引入CV模块import numpy as np #引入numpy模块# 读取图片src = cv.imread('srcun.png')dst=src#输出图像t1,dst1=cv.threshold(src,58,158,cv.THRESH_BINARY_INV) #阈值开关58,阈值上限158
t2,dst2=cv.threshold(src,100,255,cv.THRESH_BINARY_INV) #阈值开关100,阈值上限255
t3,dst3=cv.threshold(src,0,255,cv.THRESH_BINARY_INV) #阈值开关0,阈值上限255
#展示图像cv.imshow('srcf', dst)# 在屏幕展示效果cv.imshow('srcft1', dst1)# 在屏幕展示效果cv.imshow('srcft2', dst2)# 在屏幕展示效果cv.imshow('srcft3', dst3)# 在屏幕展示效果print("dst像素数为位置处的BGR=", dst)# 获取像素数为位置处的BGRprint("dst1像素数为位置处的BGR=", dst1)# 获取像素数为位置处的BGRprint("dst2像素数为位置处的BGR=", dst2)# 获取像素数为位置处的BGRprint("dst3像素数为位置处的BGR=", dst3)# 获取像素数为位置处的BGR#保存图像cv.imwrite('srcf-m-VC.png', dst)# 保存图像cv.imwrite('srcf-m-t1-VC.png', dst1)# 保存图像cv.imwrite('srcf-m-t2-VC.png', dst2)# 保存图像cv.imwrite('srcf-m-t3-VC.png', dst3)# 保存图像cv.waitKey()# 图像不会主动关闭cv.destroyAllWindows()# 开释所有窗口 代码运行后,经过饭阈值处置惩罚的图像为:
https://i-blog.csdnimg.cn/direct/bec0b26e1e954c3a8ebdab7bf8574bf3.png
图8 阈值开关58,阈值上限158,反阈值处置惩罚
https://i-blog.csdnimg.cn/direct/08059abf91984d0a901872f396eaa95b.png
 图9 阈值开关100,阈值上限255,反阈值处置惩罚
https://i-blog.csdnimg.cn/direct/ab3100a8e0424c41bb4a62a8b807d87b.png
图10 阈值开关0,阈值上限255,反阈值处置惩罚、
由图8、图9和图10反阈值效果图可见:
和灰度图像一致,对彩色图像,反阈值处置惩罚的效果也是让亮暗的地方反向变化。
特定像素点的BGR取值也能证明这一点:
https://i-blog.csdnimg.cn/direct/27576aa402314f7ea679ec97f3b677fc.png
图11
【4】细节说明

cv.THRESH_BINARY和cv.THRESH_BINARY_INV是完全相反的操作,但实际BGR值和阈值开关举行判断时,采取的操作都是按照:大于是一个取值,小于便是(不大于)是相反的取值。
【5】总结

把握了python+opencv实现灰度图和彩色图像反阈值操作的本领。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: python学opencv|读取图像(三十五)反阈值处置惩罚