图像的阈值处理

1.阈值处理的函数thershold

d1,d2=cv.threshold(src, thresh, maxval, type, dst)

src:被处理的图像,可以是多通道图像

thresh:阈值,阈值在125~150之间效果更好

maxval:阈值处理采用的最大值

type:阈值处理的类型

d1:处理时采用的阈值

d2:阈值处理过的图像

阈值是图片亮度,灰度图像阈值0为黑色,255为白色

常用类型:

 

cv.THRESH_BINARY    #二值化阈值
cv.THRESH_BINARY_INV#反二值化阈值
cv.THRESH_TOZERO    #低于阈值0处理
cv.THRESH_BINARY_INV#超出阈值0处理
cv.THRESH_TRUNC     #截断阈值处理

具体代码:

import cv2 as cv
img=cv.imread(r'img\jmh\dog.jpeg')
img1=cv.cvtColor(img,cv.COLOR_BGR2GRAY)#转化为灰度图
d1,d2=cv.threshold(img1,130,255,cv.THRESH_BINARY)#二值化阈值
#d1,d2=cv.threshold(img1,130,255,cv.THRESH_BINARY_INV)#反二值化阈值
#d1,d2=cv.threshold(img1,130,255,cv.THRESH_TOZERO)#低于阈值0处理
#d1,d2=cv.threshold(img1,130,255,cv.THRESH_BINARY_INV)#超出阈值0处理
#d1,d2=cv.threshold(img1,139,255,cv.THRESH_TRUNC)#截断阈值处理
cv.imshow('d',d2)
cv.waitKey()

二值化

反二值化 

 低于阈值0处理

 超出阈值0处理

 截断处理

 

具体解释:

二值化处理:处理图像保留两种像素,或者是所有的像素都只能从两种值中取值

if 像素值 <=阈值:
    像素值=0
if 像素值>阈值:
    像素值=最大值

d1,d2=cv.threshold(img1,130,255,cv.THRESH_BINARY)

二值化处理将亮度小于等于130的像素点修改为255

if 像素值<=阈值:
    像素值=最大值
if 像素值>阈值:
    像素值=0

d1,d2=cv.threshold(img1,130,255,cv.THRESH_BINARY_INV)

反二值化处理将亮度大于等于130的像素点修改为255

反阈值是将亮度

2.自适应处理

cv.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)

src:图像

maxValue:阈值处理采用的最大值,

adaptiveMethod:自适应阈值的计算方法

cv.ADAPTIVE_THRESH_MEAN_C:对一个正方形区域内的所有平均加权 cv.ADAPTIVE_THRESH_GAUSSIAN_C:根据高斯函数按照像素与中心点的距离对一个正方形区域的所有像素,进行加权计算

thresholdType:阈值处理类型,其处理的类型必须是二值化和反二值化

blockSize:一个正方形区域的大小

C:常熟,阈值等于,均值或者加权值减去这个常数

具体代码:

import cv2
import cv2 as cv
img=cv.imread(r'img\jmh\cat.jpg')
img1=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
img2=cv.adaptiveThreshold(img1,255,cv.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,3)
img3=cv.adaptiveThreshold(img1,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.ADAPTIVE_THRESH_GAUSSIAN_C,5,3)
cv.imshow('img2',img2)
cv.imshow('img3',img3)
cv.waitKey()

cv.ADAPTIVE_THRESH_MEAN_C处理

 cv.ADAPTIVE_THRESH_GAUSSIAN_C处理

3.Otsu方法:

寻找合适的阈值

函数:

d1,d2=cv2.threshold(src,thresh,maxval,type)

src:被处理的图片

thresh:阈值

maxval:阈值处理采用的最大值

type:阈值处理类型,在阈值处理类型传入时多传入一个参数,例如:cv.THRESH_BINARY+cv2.THRESH_OTSU

d1:返回最合适的阈值

d2:经过阈值处理的图像

具体代码:

import cv2 as cv
img=cv.imread(r'img\jmh\dog.jpeg')
img1=cv.cvtColor(img,cv.COLOR_BGR2GRAY)#转化为灰度图
d1,d2=cv.threshold(img1,130,255,cv.THRESH_BINARY+cv.THRESH_OTSU)#二值化阈值
print("合适的阈值为",d1)
cv.imshow('d',d2)
cv.waitKey()
>>合适的阈值为 131.0

 在阈值的作用下,一幅图像被转化为只有纯黑色和纯白的二值图像,然而灰度图像在经过5种阈值处理后,都无法得到图像主体的线条,为此有了自适应处理,其关键在于对图像中的不同区域使用不同阈值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值