大家好,欢迎来到IT知识分享网。
什么是阈值处理
阈值处理是剔除原图像中像素高于或者低于一定值的像素点。例如将一个灰度图像中大于200的像素点统一设置为255,这个就是阈值处理。或者说将所有低于200的像素点设置为0,也可以叫做阈值处理,两者结合处理后,图像就变为二值图像了。
threshold
在OpenCV中,我们使用cv2.threshold()函数进行阈值处理,它的定义如下所示:
def threshold(src, thresh, maxval, type, dst=None):
src:需要进行阈值处理的原始图像
thresh:需要设定的阈值
maxval:当type为THRESH_BINARY或者THRESH_BINARY_INV类型时,需要设定的最大值。
type:阈值的类型,如下表所示。
类型 |
含义 |
cv2.THRESH_BINARY |
在这里插入图片描述 |
cv2.THRESH_BINARY_INV |
在这里插入图片描述 |
cv2.THRESH_TRUNC |
在这里插入图片描述 |
cv2.THRESH_TOZERO_INV |
在这里插入图片描述 |
cv2.THRESH_TOZERO |
在这里插入图片描述 |
cv2.THRESH_MASK |
掩码 |
cv2.THRESH_OTSU |
标记,使用Otsu算法时的可选阈值参数 |
cv2.THRESH_TRIANGLE |
标记,使用Triangle算法时的可选阈值参数 |
二值化阈值处理(cv2.THRESH_BINARY)
顾名思义,二值化阈值处理,会将原始图像变更为仅有2个值的二值图像,也就是cv2.THRESH_BINARY。
下面,我们用代码来实现二值化阈值处理,具体代码如下所示:
import cv2 img = cv2.imread("4.jpg", 0) t, result_img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) cv2.imshow("img", img) cv2.imshow("result_img", result_img) cv2.waitKey() cv2.destroyAllWindows()
运行之后,效果如下所示:
可以看到通过二值化阈值处理,我们的图像有点像素描画的效果。
反二值化阈值处理(cv2.THRESH_BINARY_INV)
反二值化阈值处理的结果也是仅有两个值的二值图像,与二值化的区别在于,就是将其大于赋值255,小于赋值0颠倒过来。
修改代码,我们看看运行的效果:
import cv2 img = cv2.imread("4.jpg", 0) t, result_img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV) cv2.imshow("img", img) cv2.imshow("result_img", result_img) cv2.waitKey() cv2.destroyAllWindows()
截断阈值化处理(cv2.THRESH_TRUNC)
截断阈值化处理会将原图像中大于阈值的像素点的值设定为阈值,小于或等于像素点的值保持不变。也就是上面的将大于127像素的灰度图像全部更改为127,低于或等于127的保持不变。
import cv2 img = cv2.imread("4.jpg", 0) t, result_img = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC) cv2.imshow("img", img) cv2.imshow("result_img", result_img) cv2.waitKey() cv2.destroyAllWindows()
运行之后,得到的效果如下所示:
可以理解为比二值化更纯粹的素描。
超阈值零处理(cv2.THRESH_TOZERO_INV)
超阈值零处理会将图像中大于阈值的像素点的值处理为0,小于或等于阈值的像素点保持不变。也就是将大于127的处理为0,小于等于127的保持不变。
import cv2 img = cv2.imread("4.jpg", 0) t, result_img = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV) cv2.imshow("img", img) cv2.imshow("result_img", result_img) cv2.waitKey() cv2.destroyAllWindows()
运行之后,效果如下:
低阈值零处理(cv2.THRESH_TOZERO)
低阈值零处理是将图像中小于或等于阈值的像素点处理为0,大于阈值的像素点保持不变。也就是小于等于127的全部赋值为0,大于127的保持不变。
import cv2 img = cv2.imread("4.jpg", 0) t, result_img = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO) cv2.imshow("img", img) cv2.imshow("result_img", result_img) cv2.waitKey() cv2.destroyAllWindows()
运行之后,效果如下所示:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/162484.html