1.什么是图像二值化

彩色图像: 有blue,green,red三个通道,取值范围均为0-255

灰度图:只有一个通道0-255,所以一共有256种颜色

二值图像:只有两种颜色,黑色和白色,二值化就是把图像的像素转变为0或者255,只有这两个像素值。0白色 1黑色 。0是黑色,255是白色。

2.图像二值化

(2)根据阈值去二值化图

(3)threshold函数

ret, dst = cv2.threshold(src, thresh, maxval, type)

src: 输入图,只能输入单通道图像,通常来说为灰度图

dst: 输出图

thresh: 阈值

maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值

type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV

(4)全局阈值 -代码实现

1 #-*- coding=GBK -*-

2 importcv2 as cv3 importnumpy as np4

5

6 #图像二值化 0白色 1黑色

7 #全局阈值

8 defthreshold_image(image):9 gray =cv.cvtColor(image, cv.COLOR_BGR2GRAY)10 cv.imshow("原来", gray)11

12 ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)#大律法,全局自适应阈值 参数0可改为任意数字但不起作用

13 print("阈值:%s" %ret)14 cv.imshow("OTSU", binary)15

16 ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_TRIANGLE)#TRIANGLE法,,全局自适应阈值, 参数0可改为任意数字但不起作用,适用于单个波峰

17 print("阈值:%s" %ret)18 cv.imshow("TRIANGLE", binary)19

20 ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_BINARY)#自定义阈值为150,大于150的是白色 小于的是黑色

21 print("阈值:%s" %ret)22 cv.imshow("自定义", binary)23

24 ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_BINARY_INV)#自定义阈值为150,大于150的是黑色 小于的是白色

25 print("阈值:%s" %ret)26 cv.imshow("自定义反色", binary)27

28 ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_TRUNC)#截断 大于150的是改为150 小于150的保留

29 print("阈值:%s" %ret)30 cv.imshow("截断1", binary)31

32 ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_TOZERO)#截断 小于150的是改为150 大于150的保留

33 print("阈值:%s" %ret)34 cv.imshow("截断2", binary)35

36 src = cv.imread("C://1.jpg")37 threshold_image(src)38 cv.waitKey(0)39 cv.destroyAllWindows()

函数threshold()的参数说明:

cv.THRESH_BINARY | cv.THRESH_OTSU)#大律法,全局自适应阈值 参数0可改为任意数字但不起作用

cv.THRESH_BINARY | cv.THRESH_TRIANGLE)#TRIANGLE法,,全局自适应阈值, 参数0可改为任意数字但不起作用,适用于单个波峰

cv.THRESH_BINARY)# 自定义阈值为150,大于150的是白色 小于的是黑色

cv.THRESH_BINARY_INV)# 自定义阈值为150,大于150的是黑色 小于的是白色

cv.THRESH_TRUNC)# 截断 大于150的是改为150 小于150的保留

cv.THRESH_TOZERO)# 截断 小于150的是改为150 大于150的保留

(5)局部阈值 -代码实现

自适应阈值二值化函数根据图片一小块区域的值来计算对应区域的阈值,从而得到也许更为合适的图片。

dst = cv2.adaptiveThreshold(src, maxval, thresh_type, type, Block Size, C)

src: 输入图,只能输入单通道图像,通常来说为灰度图

dst: 输出图

maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值

thresh_type: 阈值的计算方法,包含以下2种类型:cv2.ADAPTIVE_THRESH_MEAN_C; cv2.ADAPTIVE_THRESH_GAUSSIAN_C.

type:二值化操作的类型,与固定阈值函数相同,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV.

Block Size: 图片中分块的大小,必须为奇数

C :阈值计算方法中的常数项

1 #局部阈值

2 deflocal_image(image):3 gray =cv.cvtColor(image, cv.COLOR_BGR2GRAY)4 cv.imshow("原来", gray)5 binary1 = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 25, 10) #blocksize必须为奇数6 cv.imshow("局部1", binary1)7 binary2 = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10)#高斯处理

8 cv.imshow("局部2", binary2)

(6)自己计算阈值-代码实现

图像的长宽以及灰度、RGB图像的像素原理分布

1 #-*- coding=GBK -*-

2 importcv2 as cv3 importnumpy as np4

5

6 #求出图像均值作为阈值来二值化

7 defcustom_image(image):8 gray =cv.cvtColor(image, cv.COLOR_BGR2GRAY)9 cv.imshow("原来", gray)10 h, w = gray.shape[:2]11 m = np.reshape(gray, [1, w*h])#化为一维数组

12 mean = m.sum() / (w*h)13 print("mean:", mean)14 ret, binary = cv.threshold(gray, mean, 255, cv.THRESH_BINARY)15 cv.imshow("二值", binary)16

17

18 src = cv.imread("C://1.jpg")19 custom_image(src)20 cv.waitKey(0)21 cv.destroyAllWindows()

参考:

python将灰度图像二值化_python实现图像二值化相关推荐

  1. opencv进阶学习9:图像阈值大全,图像二值化,超大图像二值化

    基础版笔记链接: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版二值化讲解 opencv ...

  2. matlab 反向二值化,MATLAB:图像二值化、互补图(反运算)(im2bw,imcomplement函数)...

    图像二值化.反运算过程涉及到im2bw,imcomplement函数,反运算可以这么理解:原本黑的区域变为白的区域,白的区域变为黑的区域. 实现过程如下: close all;%关闭当前所有图形窗口, ...

  3. 图像二值化 php im2bw,图像二值化-MATLAB实现

    1.图像二值化代码: A=imread('hw1.chips1.GIF'); %读取到一张图片 %thresh = graythresh(A); %自动确定二值化阈值 I2 = im2bw(A,120 ...

  4. opencv 二值化 matlab,opencv-python图像二值化函数cv2.threshold函数详解及参数cv2.THRESH...

    cv2.threshold()函数的作用是将一幅灰度图二值化,基本用法如下: #ret:暂时就认为是设定的thresh阈值,mask:二值化的图像 ret,mask = cv2.threshold(i ...

  5. python返回函数值并退出函数_Python函数的返回值和作用域

    函数的返回值和作用域 1.返回值 def guess(x): if x > 3: return "> 3" else: return "<= 3&quo ...

  6. 用python生成个性二维码_Python 生成个性二维码

    1.1 实验内容 本课程通过调用MyQR接口来实现生成个人所需二维码,并可以设置二维码的大小.是否在现有图片的基础上生成.是否生成动态二维码. 本课程主要面向Python3初学者. 1.2 知识点 P ...

  7. python图像灰度化_python实现图片二值化及灰度处理方式

    python实现图片二值化及灰度处理方式 我就废话不多说了,直接上代码吧! 集成环境:win10 pycharm #!/usr/bin/env python3.5.2 # -*- coding: ut ...

  8. opencv 二值化 python_Python OpenCV 图像二值化-阈值分割

    1.二值化处理 # 手动二值化处理 # 设置阈值大小 threshold thresh = 125 # 设置超过阈值像素值的最大值 maxval = 255 # THRESH_BINARY:超过阈值为 ...

  9. python字典取键值对_python 获取字典键值对的实现

    获 得 字 典 键. 值 的 函 数 有: items/ iteritems/ keys/ iterkeys/ values/ itervalues 通 过 以 上 这 些 函 数 得 到 的 是 键 ...

最新文章

  1. 运维企业专题(8)LVS高可用与负载均衡后篇——LVS健康检查与高可用详解
  2. 今天整理了下所有博文
  3. python创建文件并写入-python新建txt文件,并逐行写入数据
  4. 通过完整示例来理解如何使用 epoll
  5. linux top 命令可视化_Linux top命令使用详解:显示或管理执行中的程序
  6. PHP多线程的实现(PHP多线程类)
  7. 全新的企业通讯软件 FreeEIM 2.0
  8. input输入框提示从数据库查出来的一堆数据
  9. PAT (Basic Level) Practice1023 组个最小数
  10. 红帽认证是什么?红帽认证含金量高吗?
  11. Real-Time Rendering——Chapter 11 Non-Photorealistic Rendering
  12. DB2-SQLCODE 错误码大全---[IBM官方]
  13. 希尔伯特空间(Hilbert空间)
  14. 2018年第九届蓝桥杯真题C/C++B组
  15. windows10桌面_Windows桌面美化记(一)这可能是你看过最详细的美化教程
  16. 零信任架构:下一代网络安全架构?
  17. 语音验证码接口PYTHO语言
  18. Kafka监控eagle
  19. opencv ipcam
  20. 五行各500字,2位字符串组合,数据量大而采取分段输出表格形式方程式

热门文章

  1. c语言的数学题目及答案,C语言编程实例:爱因斯坦的数学题
  2. Hindsight Experience Replay
  3. 程序员的简历到底该怎么写?(转)
  4. 概率论与数理统计学习笔记——6.3卡方、t和F分布
  5. EBS 库存管理操作实例14——销售单发放(Sales Order Issue)
  6. Android Studio SQLlite学习
  7. Java枚举Enum 与字符串的比较
  8. 【Unity】UGUI超级简单的摇杆制作,摇杆控制物体移动
  9. linux显示今日信息,linux lsmod命令详解
  10. svn local delete, incoming delete upon update 解决办法