常规5大阈值处理---OpenCV-Python开发指南(15)

简介: 常规5大阈值处理---OpenCV-Python开发指南(15)

什么是阈值处理


阈值处理是剔除原图像中像素高于或者低于一定值的像素点。例如将一个灰度图像中大于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()

运行之后,效果如下所示:

相关文章
|
7月前
|
数据采集 存储 XML
深入浅出:基于Python的网络数据爬虫开发指南
【2月更文挑战第23天】 在数字时代,数据已成为新的石油。企业和个人都寻求通过各种手段获取互联网上的宝贵信息。本文将深入探讨网络爬虫的构建与优化,一种自动化工具,用于从网页上抓取并提取大量数据。我们将重点介绍Python语言中的相关库和技术,以及如何高效、合法地收集网络数据。文章不仅为初学者提供入门指导,也为有经验的开发者提供进阶技巧,确保读者能够在遵守网络伦理和法规的前提下,充分利用网络数据资源。
|
7月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.8、threshold阈值0-4效果对照图
OpenCV这么简单为啥不学——1.8、threshold阈值0-4效果对照图
70 0
|
4月前
|
机器学习/深度学习 XML 搜索推荐
图像自动化保存工具:Python脚本开发指南
图像自动化保存工具:Python脚本开发指南
|
6月前
|
算法 计算机视觉
【Qt&OpenCV 图像阈值操作 threshold】
【Qt&OpenCV 图像阈值操作 threshold】
68 0
|
7月前
|
计算机视觉
OpenCV图像阈值
OpenCV图像阈值
29 0
|
计算机视觉
opencv 之 图像阈值处理
opencv 之 图像阈值处理
|
7月前
|
算法 计算机视觉
【OpenCV】—阈值化
【OpenCV】—阈值化
|
7月前
|
计算机视觉 Python
OpenCV中阈值处理函数和二值化、反二值化的讲解及实战(附Python源码)
OpenCV中阈值处理函数和二值化、反二值化的讲解及实战(附Python源码)
358 0
|
算法 计算机视觉
OpenCV-自适应阈值函数cv::adaptiveThreshold
OpenCV-自适应阈值函数cv::adaptiveThreshold
126 0
OpenCV-自适应阈值函数cv::adaptiveThreshold
|
数据采集 JavaScript 前端开发
Web爬虫开发指南:使用Python的BeautifulSoup和Requests库
Web爬虫是一种从互联网上获取数据的自动化工具,它可以用于抓取网页内容、提取信息和分析数据。Python提供了一些强大的库,其中BeautifulSoup和Requests是两个常用的工具,用于解析HTML内容和发起HTTP请求。本文将介绍如何使用BeautifulSoup和Requests库构建一个简单而有效的Web爬虫。