Opencv学习笔记10 -- 图像阀值

简介

图像阀值可以理解为一种对图像像素点的分类器,通过设置不同的限制值来对图片内的像素点进行分类。具体将在下文中记录。

二值阀值化

先通过代码演示,之后会记录各个参数的意义

import  cv2

p = cv2.imread('2.png',1)
#第二个参数为阀值(当像素小于这个阀值则置0,大於则置255,并通过运算显示分类),第三个参数为最大值,第四个参数为flag标志位
r , p2 = cv2.threshold(p,180,255,cv2.THRESH_BINARY)
cv2.imshow('origin',p)
cv2.imshow('outcome',p2)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果:
原图:
在这里插入图片描述效果图:
在这里插入图片描述可以看到分类边界,通过改变不同的分类阀值可以获得不同的输出,这里可以根据实际情况更改第二个参数

反向二值阀值化

与上文的作用相同,只不过颜色对调

代码演示:

import  cv2

p = cv2.imread('2.png',1)
#只有flag标记位发生了改变
r , p2 = cv2.threshold(p,180,255,cv2.THRESH_BINARY_INV)
cv2.imshow('origin',p)
cv2.imshow('outcome',p2)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果图:
在这里插入图片描述发现颜色发生了转换

截断阀值化

代码:

import  cv2

p = cv2.imread('2.png',1)
#这里的第二个参数也是阀值,但是意义发生了改变,具体改变下文会记录
r , p2 = cv2.threshold(p,127,255,cv2.THRESH_TRUNC)
cv2.imshow('origin',p)
cv2.imshow('outcome',p2)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图:
在这里插入图片描述效果图:
在这里插入图片描述这里说明一下第二个参数的作用为,当图中像素点大于127(自己设定的)则替换为127(图左侧). 低于127的则保留

自适应阀值

自适应阀值在应用中很多,比如读取数字,文字等操作都可以用到,他是自动根据图片来选择合适的阀值,有两种方法:1.均值自适应 2.高斯自适应

均值自适应

代码:

import  cv2
#注意传入灰度图
p = cv2.imread('3.png',0)
p2 = cv2.adaptiveThreshold(p,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,15,2)
cv2.imshow('origin',p)
cv2.imshow('outcome',p2)
cv2.waitKey(0)
cv2.destroyAllWindows()
p2 = cv2.adaptiveThreshold(p,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,15,2)

这句核心代码前4个参数是固定的

第五个参数注意只能是单数(我也不清楚为什么,opencv中很多参数如果报错那么改成单数就会解决很大一部分),指的是局部阀值的影响范围

第六个参数可以根据实际需要决定

原图:
在这里插入图片描述效果图:
在这里插入图片描述
高斯自适应

import  cv2

p = cv2.imread('3.png',0)
#各项参数可以参考二值阀值化 , 进行这行前可自行添加高斯模糊去噪点
r , p2 = cv2.threshold(p,155,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C)
cv2.imshow('origin',p)
cv2.imshow('outcome',p2)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果图:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章