『youcans 的 OpenCV 例程200篇 - 总目录』

【OpenCV 例程200篇】37. 图像的灰度化处理和二值化处理

按照颜色对图像进行分类,可以分为二值图像、灰度图像和彩色图像。

  • 二值图像:只有黑色和白色两种颜色的图像。每个像素点可以用 0/1 表示,0 表示黑色,1 表示白色。
  • 灰度图像:只有灰度的图像。每个像素点用 8bit 数字 [0,255] 表示灰度,如:0 表示纯黑,255 表示纯白。
  • 彩色图像:彩色图像通常采用红色(R)、绿色(G)和蓝色(B)三个色彩通道的组合表示。

OpenCV 中彩色图像使用 BGR 格式。彩色图像进行灰度化处理,可以在读取图像文件时直接读取为灰度图像,也可以通过颜色空间转换函数 cv2.cvtColor 将彩色图像转换为灰度图像。

灰度化处理相关函数和例程介绍,详见 [OpenCV 学习课-2.图像读取与显示]。

# 1.1 图像的读取imgFile = "../images/imgLena.tif"  # 读取文件的路径img1 = cv2.imread(imgFile, flags=1)  # flags=1 读取彩色图像(BGR)img2 = cv2.imread(imgFile, flags=0)  # flags=0 读取为灰度图像# 1.10 图像显示(plt.imshow)imgRGB = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)  # 图片格式转换:BGR(OpenCV) -> RGB(PyQt5)imGray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)  # 图片格式转换:BGR(OpenCV) -> Gray

进一步地,通过函数 cv2.threshold 可以对图像进行二值化处理。

函数说明:

cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dst

函数 threshold() 可以将灰度图像转换为二值图像,图像完全由像素 0 和 255 构成,呈现出只有黑白两色的视觉效果。

灰度阈值化通过选取的灰度阈值 thresh,将每个像素的灰度值与阈值进行比较,将灰度大于阈值的像素点置为最大灰度,小于阈值的像素点置为最小灰度,得到二值图像,可以突出图像轮廓,把目标从背景中分割出来。

参数说明:

  • scr:变换操作的输入图像,nparray 二维数组,必须是单通道灰度图像!
  • thresh:阈值,取值范围 0~255
  • maxval:填充色,取值范围 0~255,一般取 255
  • type:变换类型
    • cv2.THRESH_BINARY:大于阈值时置 255,否则置 0
    • cv2.THRESH_BINARY_INV:大于阈值时置 0,否则置 255
    • cv2.THRESH_TRUNC:大于阈值时置为阈值 thresh,否则不变(保持原色)
    • cv2.THRESH_TOZERO:大于阈值时不变(保持原色),否则置 0
    • cv2.THRESH_TOZERO_INV:大于阈值时置 0,否则不变(保持原色)
    • cv2.THRESH_OTSU:使用 OTSU 算法选择阈值
  • 返回值 retval:返回二值化的阈值
  • 返回值 dst:返回阈值变换的输出图像

注意:

  1. 函数 cv2.threshold 进行固定阈值的二值化处理;函数 cv2.adaptiveThreshold 为自适应阈值的二值化处理函数,可以通过比较像素点与周围像素点的关系动态调整阈值。
  2. 确切地说,只有 type 为 cv2.THRESH_BINARY 或 cv2.THRESH_BINARY_INV 时输出为二值图像,其它变换类型时进行阈值处理但并不是二值处理。

例程:1.47 图像的二值变换(固定阈值)

    # 1.47 固定阈值二值变换img = cv2.imread("../images/imgLena.tif")  # 读取彩色图像(BGR)imgGray = cv2.imread("../images/imgLena.tif", flags=0)  # flags=0 读取为灰度图像# imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 颜色转换:BGR(OpenCV) -> Gray# cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dstret1, img1 = cv2.threshold(imgGray, 63, 255, cv2.THRESH_BINARY)  # 转换为二值图像, thresh=63ret2, img2 = cv2.threshold(imgGray, 127, 255, cv2.THRESH_BINARY)  # 转换为二值图像, thresh=127ret3, img3 = cv2.threshold(imgGray, 191, 255, cv2.THRESH_BINARY)  # 转换为二值图像, thresh=191ret4, img4 = cv2.threshold(imgGray, 127, 255, cv2.THRESH_BINARY_INV)  # 逆二值图像,BINARY_INVret5, img5 = cv2.threshold(imgGray, 127, 255, cv2.THRESH_TRUNC)  # TRUNC 阈值处理,THRESH_TRUNCret6, img6 = cv2.threshold(imgGray, 127, 255, cv2.THRESH_TOZERO)  # TOZERO 阈值处理,THRESH_TOZEROplt.figure(figsize=(9, 6))titleList = ["1. BINARY(thresh=63)", "2. BINARY(thresh=127)", "3. BINARY(thresh=191)", "4. THRESH_BINARY_INV", "5. THRESH_TRUNC", "6. THRESH_TOZERO"]imageList = [img1, img2, img3, img4, img5, img6]for i in range(6):plt.subplot(2, 3, i+1), plt.title(titleList[i]), plt.axis('off')plt.imshow(imageList[i], 'gray')  # 灰度图像 ndim=2plt.show()

(本节完)


版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/121451915)
Copyright 2022 youcans, XUPT
Crated:2021-11-18

【第4章:灰度变换与直方图】

37. 图像的灰度化处理和二值化处理
38. 图像的反色变换(图像反转)
39. 图像灰度的线性变换

【OpenCV 例程200篇】37. 图像的灰度化处理和二值化处理(cv2.threshold)相关推荐

  1. 【youcans 的 OpenCV 例程200篇】144. 基于灰度形态学的纹理分割

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  2. 【youcans 的 OpenCV 例程200篇】146. 基于灰度形态学的复杂背景图像重建

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  3. 【youcans 的 OpenCV 例程200篇】143. 基于灰度形态学的粒度测定

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  4. 【youcans 的 OpenCV 例程200篇】158. 阈值处理之固定阈值法

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  5. 【youcans 的 OpenCV 例程200篇】157. 霍夫变换直线检测

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  6. 【youcans 的 OpenCV 例程200篇】152. 边缘检测之 LoG 算子

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  7. 【youcans 的 OpenCV 例程200篇】150. 边缘检测梯度算子

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  8. 【youcans 的 OpenCV 例程200篇】149. 图像分割之边缘模型

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  9. 【youcans 的 OpenCV 例程200篇】147. 图像分割之孤立点检测

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  10. 【youcans 的 OpenCV 例程200篇】153. 边缘检测之 DoG 算子

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

最新文章

  1. 研发团队来了高颜值的妹子,这结局万万没想到 | 每日趣闻
  2. 面对不可避免的故障,我们造了一个“上帝视角”的控制台
  3. lucky前面加a还是an_lucky的用法
  4. 1607: 字符棱形
  5. linux安装gtk命令,Ubuntu 下安装 GTK2.0
  6. webmail lite php,自建webmail网页客户端
  7. oracle libary cache 命中率
  8. vs2010 sp1 安装Silverlight5 语言版本不匹配 解决方案
  9. 经典股票图形:蛟龙出海
  10. 各代iphone尺寸_iPhone12大小尺寸是多少?四款iPhone12系列尺寸对比长宽高
  11. Oracle的本地网络服务名配置
  12. flutter 打包apk
  13. 一文看懂苹果WWDC20:iOS 14更好玩,可Intel要哭瞎了
  14. dataframe如何定义列名称
  15. python的介绍和及基本的使用
  16. Android开发自定义UI组件
  17. 给 Linux 系统“减肥”,系统垃圾清理
  18. dm3730调试笔记
  19. 【信号分解】基于LMD算法和ELMD算法实现管道泄漏信号处理附matlab代码
  20. 虚拟机Ubuntu安装开发环境配置

热门文章

  1. 计算机审计实验一计划阶段,审计实验1.ppt
  2. Python Selenium IE 上传文件和 处理网页对话框showModalDailog模态对话框
  3. 在win7中chm打不开的方法
  4. 计算机组成原理复习笔记
  5. 为什么我的世界服务器显示红叉,我的世界藏宝图怎么看红叉
  6. 凹多边形三角剖分算法实现---基于Unity3D
  7. MacBook 运维软件
  8. C语言实现图的关键路径算法
  9. java calendar星期几_正确获取星期几(Calendar.DAY_OF_WEEK)
  10. 良心高效,3款超级好用的PC端软件,让你找不到拒绝的理由