初识opeanCV(2)

发布时间:2024年01月17日

简介

????????OpeanCV是一个开源的计算机视觉和机器学习软件库。它由一系列的C函数和少量C++类构成,同时提供Python、Java和MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。在此将从基础功能开始介绍OpeanCV。

边界填充

边界填充是指对待处理的图片边界进行扩充,下面列出一些常用的填充效果。

# cv2.BORDER_CONSTANT:添加的边界框像素值为常数(自行给出)
# cv2.BORDER_REFLECT:添加的边界框为边界像素的镜面反射如dcba|abcdefg|gfed
# cv2.BORDER_REFLECT_101或者cv2.BORDER_DEFAULT:与上面类似但有区别如dcb|abcdefg|fed(临近的一个不会映射)
# cv2.BORDER_REPLICATE:使用最边界的像素值代替如aaaaa|abcdefg|gggggg
# cv2.BORDER_WRAP:左右两边替代如abcdefg|abcdefg|abcdefg

我们以第四种为列进行效果展示,读者可以自行修改代码学习其他填充效果

a=cv2.imread('tiaowen.jpg')   #替换成自己的图片,注意图片要放到代码文件同文件夹下
top,bottom,left,right=50,50,50,50   #填充域
a=cv2.copyMakeBorder(a,top,bottom,left,right,cv2.BORDER_REPLICATE)
cv2.imshow('123',a)
cv2.waitKey(00)    #等待时间
cv2.destroyAllWindows()

阈值处理

阈值处理通常会设定一个阈值,通过阈值将图像的像素划分为两类:大于阈值的像素和小于阈值的像素。灰度转换处理后的图像中,每个像素都只有一个灰度值,其大小表示明暗程度。二值化处理可以将图像中的像素划分为两类颜色。常用效果如下

#        选项          像素值>thresh             其他情况
# cv2.THRESH_BINARY      maxval                  0          大于thresh就变成maxval
# cv2.THRESH_BINARY_INV    0                   maxval       与上述相反
# cv2.THRESH_TRUNC       thresh               当前灰度值      大于thresh就变成thresh
# cv2.THRESH_TOZERO     当前灰度值                 0          大于thresh不变其他设为0
# cv2.THRESH_TOZERO_INV    0                  当前灰度值      与上述相反
我们需要用到cv2.threshold(src,thresh,maxval,type):
#src代表要进行阈值分割的图像,可以是多通道的,8位或32位浮点型数值
#thresh代表要设定的阈值
#maxval代表type参数位THRESH_BINARY或者THRESH_BINARY_INV类型时需要设定的最大值
#type代表阈值分割的类型

下面展示所有效果(第一个为灰度图,阈值处理是在灰度图的基础上进行的!!!)

代码如下,大家可以自己调整参数观察变化,理解不同操作的含义

image=cv2.imread('car.jpg',cv2.IMREAD_GRAYSCALE)#灰度图
image=cv2.resize(image,(800,500))
cv2.imshow('hui',image)
cv2.waitKey(0)  #0表示等你键入任意键
ret, binary=cv2.threshold(image,140,80,cv2.THRESH_BINARY)
cv2.imshow('binary',binary)
cv2.waitKey(0)
ret1,binaryinv=cv2.threshold(image,140,230,cv2.THRESH_BINARY_INV)
cv2.imshow('binaryinv',binaryinv)
cv2.waitKey(0)
ret2,trunc=cv2.threshold(image,180,200,cv2.THRESH_TRUNC)
cv2.imshow('trunc',trunc)
cv2.waitKey(0)
ret3,tozero=cv2.threshold(image,120,255,cv2.THRESH_TOZERO)
cv2.imshow('tozero',tozero)
cv2.waitKey(0)
ret4,tozeroinv=cv2.threshold(image,100,200,cv2.THRESH_TOZERO_INV)
cv2.imshow('tozeroinv',tozeroinv)
cv2.waitKey(0)

图像平滑处理

图像平滑处理可以帮助我们消除一些图像的噪声点,帮助我们恢复图像。常有的方法如下:

# 均值滤波
# jun=cv2.blur(src,ksize,anchor,borderType)
# jun 返回值
# src 文件名称
# ksize 滤波核(卷积核)的大小
# anchor 锚点,默认值(-1,-1)一般无需改动
# borderType 边界样式,一般无需改动

# 方框滤波
# box=cv2.boxFilter(src,ddepth,ksize,anchor,normalize,borderType)
# ddepth 处理结果的图像深度,一般使用-1表示与原始图像相同的图像深度
# normalize 表示滤波时是否进行归一化

# 高斯滤波
# gauss=cv2.GaussianBlur(src,ksize[,sigmaX[,sigmaY[,dst]]])
# sigmaX sigmaY表示在x轴y轴上的标准差,这些值与滤波器大小相同。默认为0
# dst 输出图像,通常是一个numpy数组,如果为NONE则会创建一个新的数组来存储结果

#中值滤波
# meida=cv2.medianBlur(src,ksize[,dst])
# dst 输出图像,通常是一个numpy数组,如果为NONE则会创建一个新的数组来存储结果

关于集中滤波的详细介绍推荐阅读:

数字图像处理(11): 图像平滑 (均值滤波、中值滤波和高斯滤波)_高斯滤波,均值滤波,中值滤波-CSDN博客

方框滤波:方框滤波(Box filtering)-CSDN博客?

效果展示

完整代码如下?

需要生成噪声图的可以观看下面的博客:

噪声图生成-CSDN博客

noise=cv2.imread('cai_zao.jpg')   #读取你的噪声图
cv2.imshow('zao',noise)
# 均值滤波
# jun=cv2.blur(src,ksize,anchor,borderType)
# jun 返回值
# src 文件名称
# ksize 滤波核(卷积核)的大小
# anchor 锚点,默认值(-1,-1)一般无需改动
# borderType 边界样式,一般无需改动
blur_1=cv2.blur(noise,(9,9))
cv2.imshow('blur',blur_1)
# cv2.waitKey(0)

# 方框滤波
# box=cv2.boxFilter(src,ddepth,ksize,anchor,normalize,borderType)
# ddepth 处理结果的图像深度,一般使用-1表示与原始图像相同的图像深度
# normalize 表示滤波时是否进行归一化
boxFilter =cv2.boxFilter(noise,-1,(9,9),normalize=True)
cv2.imshow('boxFilter',boxFilter)
# cv2.waitKey(0)

# 高斯滤波
# gauss=cv2.GaussianBlur(src,ksize[,sigmaX[,sigmaY[,dst]]])
# sigmaX sigmaY表示在x轴y轴上的标准差,这些值与滤波器大小相同。默认为0
# dst 输出图像,通常是一个numpy数组,如果为NONE则会创建一个新的数组来存储结果
gaus=cv2.GaussianBlur(noise,(9,9),1)
cv2.imshow('GaussianBlur',gaus)
# cv2.waitKey(00)

#中值滤波
# meida=cv2.medianBlur(src,ksize[,dst])
# dst 输出图像,通常是一个numpy数组,如果为NONE则会创建一个新的数组来存储结果
medianBlur=cv2.medianBlur(noise,9)
cv2.imshow('medianBlur',medianBlur)
cv2.waitKey(0)

?对于效果不满意的可以修改自己的卷积核大小。

文章来源:https://blog.csdn.net/m0_62844219/article/details/135636949
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。