OpenCV-图像二值化

文章目录

所有相关接口验证demo以上传至仓库

代码地址:https://gitee.com/norep/learn-opencv


二值化:将图像的每个像素都变成两种值,0 或 255

全局二值化

用于对图像进行阈值操作,即根据一个阈值将图像中的像素值划分为两部分。这个函数常用于图像的二值化处理,将图像转换为仅包含黑白两种颜色的图像。

Python 复制代码
(thresh, img_bin) = cv2.threshold(img, thresh, maxval, type)

参数说明:

  • img:一个 NumPy 数组,表示要进行阈值操作的源图像。这个图像应该是一个灰度图像。

  • thresh:一个浮点数,表示阈值。所有像素值大于或等于这个值的像素将被设置为最大值 maxval,所有小于这个值的像素将被设置为 0。

  • maxval:一个可选的浮点数,表示阈值操作后的像素值的最大值。默认值为 255。

  • type:一个整数,表示阈值操作的类型。

返回值:

  • (thresh, img_bin):一个元组,其中 thresh 是阈值,img_bin 是阈值操作后的二值图像。

常见的阈值类型包括:

  • cv2.THRESH_BINARY:大于阈值的像素值为最大值,小于阈值的像素值为 0。

  • cv2.THRESH_BINARY_INV:大于阈值的像素值为 0,小于阈值的像素值为最大值。

  • cv2.THRESH_TRUNC:大于阈值的像素值被截断为最大值,小于阈值的像素值保持不变。

  • cv2.THRESH_TOZERO:小于阈值的像素值保持不变,大于阈值的像素值被设置为 0。

  • cv2.THRESH_TOZERO_INV:小于阈值的像素值被设置为 0,大于阈值的像素值保持不变。

举例

Python 复制代码
pic1_gray = cv2.imread(pic_path, cv2.IMREAD_GRAYSCALE)
threshold, img = cv2.threshold(pic1_gray, 140, 255, cv2.THRESH_BINARY)
cv2.imshow("raw", pic1_gray)
cv2.imshow("threshold", img)

自适应阈值二值化

用于对图像进行自适应阈值处理。这种方法通过计算局部阈值来对图像进行二值化,通常用于文本识别、图像分割等场景。

全局二值化函数的整幅图像使用同一个阈值,如果图像各个区域亮度不同时,将不再适用,自适应二值化能够通过图像的局部区域亮度自动计算阈值,从而获取更好的效果。

Python 复制代码
dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)

参数说明:

  • src:一个 NumPy 数组,表示要进行自适应阈值处理的源图像。这个图像应该是一个灰度图像。

  • maxValue:一个浮点数,表示阈值的最大值。所有像素值大于或等于这个值的像素将被设置为最大值 maxValue,所有小于这个值的像素将被设置为 0。

  • adaptiveMethod:一个整数,表示自适应方法。

  • thresholdType:一个整数,表示阈值类型。

  • blockSize:一个整数,表示用于计算阈值的局部区域的尺寸。

  • C:一个可选的浮点数,表示偏移量。这个值会被添加到计算出的阈值。

返回值:

  • dst:一个 NumPy 数组,表示自适应阈值处理后的结果图像。

常见的自适应方法包括:

  • cv2.ADAPTIVE_THRESH_MEAN_C:使用局部像素的平均值作为阈值。

  • cv2.ADAPTIVE_THRESH_GAUSSIAN_C:使用局部像素的高斯分布作为阈值。

常见的阈值类型包括:

  • cv2.THRESH_BINARY:大于阈值的像素值为最大值,小于阈值的像素值为 0。

  • cv2.THRESH_BINARY_INV:大于阈值的像素值为 0,小于阈值的像素值为最大值。

举例

Python 复制代码
pic1_gray = cv2.imread(pic_path, cv2.IMREAD_GRAYSCALE)
img = cv2.adaptiveThreshold(pic1_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 3, cv2.THRESH_BINARY)
cv2.imshow("raw", pic1_gray)
cv2.imshow("threshold", img)
相关推荐
冬奇Lab15 小时前
开源项目第158期:cangjie-skill — 把书、视频、播客里的方法论蒸馏成可调用的 AI Skills
人工智能·开源·资讯
习明然16 小时前
我的本地化AI项目(三)
人工智能·python·electron·c#·avalonia
程序猿炎义17 小时前
一人内容团队——用Amazon Quick Desktop实现小红书从选题到发布的全流程自动化
大数据·人工智能·microsoft·自动化·小红书
阿虎儿17 小时前
daytona创建snapshot: Failed to get initial runner: Error: No available runners
人工智能
字节跳动视频云技术团队18 小时前
火山引擎 × 央视网 打造 2026 世界杯沉浸式观赛盛宴
人工智能·音视频开发
IT_陈寒18 小时前
Java线程池这个坑我算是踩明白了
前端·人工智能·后端
创安达科技18 小时前
2026 市政太阳能警示设施采购,多维度设备性能评估参考
人工智能·太阳能道钉灯·创安达
isyangli_blog18 小时前
西钻—— 图影智绘创作课堂 (豆包、千问)
人工智能