重庆长寿网站设计公司哪家专业,德州建设网站有,网络推广及网站建设合作协议,阿里云 个人网站接上篇#xff1a;《Opencv》基础操作详解#xff08;2#xff09;-CSDN博客
Opencv基础操作
目录
Opencv基础操作
18、图像边界填充 19、阈值处理#xff08;图像的二值化#xff09;
20、图像平滑处理
#xff08;1#xff09;、均值滤波#xff08;Mean Filte…接上篇《Opencv》基础操作详解2-CSDN博客
Opencv基础操作
目录
Opencv基础操作
18、图像边界填充 19、阈值处理图像的二值化
20、图像平滑处理
1、均值滤波Mean Filtering
2、方框滤波Box Filtering
3、高斯滤波Gaussian Filtering
4、中值滤波Median Filtering
21、图像形态学操作
1、图像腐蚀
2、图像膨胀 3、开运算先腐蚀后膨胀
4、闭运算先膨胀后腐蚀 18、图像边界填充 cv2.copyMakeBorder()是OpenCV库中的一个函数用于给图像添加额外的边界(padding)。 copyMakeBorder(src: UMat, top: int, bottom: int, left: int, right: int, borderType: int, dst: UMat | None ..., value: cv2.typing.Scalar ...) src:要扩充边界的原始图像。 top, bottom, left, right:相应方向上的边框宽度。 borderType:定义要添加边框的类型它可以是以下的一种 cv2.BORDER_CONSTANT:添加的边界框像素值为常数(需要额外再给定一个参数)。cv2.BORDER_REFLECT:添加的边框像素将是边界元素的镜面反射类似于gfedcba|abcdefgh|hgfedcba。 (交界处也复制了cv2.BORDER_REFLECT_101 或 cv2.BORDER_DEFAULT和上面类似但是有一些细微的不同类似于gfedcb|abcdefgh|gfedcba (交接处删除了 cv2.BORDER_REPLICATE使用最边界的像素值代替类似于aaaaaa|abcdefgh|hhhhhhhcv2.BORDER_WRAP上下左右边依次替换cdefgh|abcdefgh|abcdefg import cv2
img cv2.imread(./images/img.png)
constant cv2.copyMakeBorder(img,50,50,50,50,borderTypecv2.BORDER_CONSTANT,value(229,25,80))
reflact cv2.copyMakeBorder(img,50,50,50,50,borderTypecv2.BORDER_REFLECT)
reflact101 cv2.copyMakeBorder(img,50,50,50,50,borderTypecv2.BORDER_REFLECT101)
replicate cv2.copyMakeBorder(img,50,50,50,50,borderTypecv2.BORDER_REPLICATE)
wrap cv2.copyMakeBorder(img,50,50,50,50,borderTypecv2.BORDER_WRAP)cv2.imshow(yuan,img)
cv2.waitKey(0)
cv2.imshow(constant,constant)
cv2.waitKey(0)
cv2.imshow(reflact,reflact)
cv2.waitKey(0)
cv2.imshow(reflact101,reflact101)
cv2.waitKey(0)
cv2.imshow(replicate,replicate )
cv2.waitKey(0)
cv2.imshow(wrap,wrap)
cv2.waitKey(0)
cv2.destroyAllWindows() 19、阈值处理图像的二值化 阈值处理是指剔除图像内像素值高于一定值或低于一定值的像素点。 retval,dstcv2.threshold(src,thresh,maxval,type) retval 代表返回的阈值 dst 代表阈值分割结果图像与原始图像具有相同的大小和类型 src 代表要进行阈值分割的图像可以是多通道的8位或32位浮点型数值 thresh 代表要设定的阈值 maxval 代表type参数位THRESH_BINARY或者THRESH_BINARY_INV类型时需要设定的最大值 type 代表阈值分割的类型具体内容如下表所示: 选项 像素值thresh 其他情况cv2.THRESH_BINARYmaxval0cv2.THRESH_BINARY_INV0maxvalcv2.THRESH_TRUNCthresh当前灰度值 cv2.THRESH_TOZERO当前灰度值0cv2.THRESH_TOZERO_INV0当前灰度值 img cv2.imread(./images/img_1.png,0)
ret,binary cv2.threshold(img,150,255,cv2.THRESH_BINARY)
ret1,binaryinv cv2.threshold(img,150,255,cv2.THRESH_BINARY_INV)
ret2,trunc cv2.threshold(img,150,255,cv2.THRESH_TRUNC)
ret3,tozero cv2.threshold(img,150,255,cv2.THRESH_TOZERO)
ret4,tozeroinv cv2.threshold(img,150,255,cv2.THRESH_TOZERO_INV)cv2.imshow(yuantu,img)
cv2.waitKey(0)
cv2.imshow(binary,binary)
cv2.waitKey(0)
cv2.imshow(binaryinv,binaryinv)
cv2.waitKey(0)
cv2.imshow(trunc,trunc)
cv2.waitKey(0)
cv2.imshow(tozero,tozero)
cv2.waitKey(0)
cv2.imshow(tozeroinv,tozeroinv)
cv2.waitKey(0)
cv2.destroyAllWindows()
print(ret) 20、图像平滑处理 图像平滑smoothing也称为“模糊处理”bluring 是一项简单且使用频率很高的图像处理方法。 可以用来压制、弱化或消除图像中的细节、突变、边缘和噪声。但最常见的是用来减少图像上的噪声或者失真。 降低图像分辨率时平滑处理是很重要的。 下面是几种在图像平滑处理时常用的滤波器
1、均值滤波Mean Filtering 均值滤波是一种简单的线性滤波方法它通过计算图像中每个像素周围邻域的平均值来替代该像素的值。均值滤波器通常使用一个固定大小的窗口如3x3、5x5等在图像上滑动窗口内的所有像素值的平均值作为中心像素的新值。 dstcv2.blur(src, ksize, anchor, borderType) dst 是返回值 src 是需要处理的图像 kszie 是滤波核(卷积核)的大小 anchor是锚点默认值是-1-1一般无需更改 borderType 是边界样式一般无需更改 公式 特点 简单易实现。 对高斯噪声有较好的平滑效果。 可能会模糊图像的边缘。
2、方框滤波Box Filtering 方框滤波与均值滤波非常相似区别在于方框滤波可以选择是否对窗口内的像素值进行归一化。如果不进行归一化方框滤波实际上就是对窗口内的像素值进行求和。 dstcv2.boxFiltersrc,ddepth,ksize,anchor,normalize,borderType dst 是返回值表示进行方框滤波后得到的处理结果。 src 是需要处理的图像即原始图像。 ddepth 是处理结果图像的图像深度一般使用-1表示与原始图像使用相同的图像深度。可以理解为数据类型 ksize 是滤波核的大小。滤波核大小是指在滤波处理过程中所选择的邻域图像的高 度和宽度。 anchor 是锚点指对应哪个区域 normalize 表示在滤波时是否进行归一化当值为True时归一化用邻域像素值的和除以面积。 此时方框滤波与 均值滤波 效果相同当值为False时不归一化直接使用邻域像素值的和。和大于255时使用255。 公式 特点 与均值滤波类似但可以选择不进行归一化。 常用于积分图像的计算。
3、高斯滤波Gaussian Filtering 高斯滤波是一种加权平均滤波方法它使用高斯函数来计算窗口内像素的权重。高斯滤波器根据像素与中心像素的距离来分配不同的权重距离越近的像素权重越大。 cv2.GaussianBlur(src, ksize[, sigmaX[, sigmaY[, dst]]]) src: 输入图像通常是一个NumPy数组。 ksize: 滤波器的大小它是一个元组表示在水平和垂直方向上的像素数量。例如(5, 5)表示一个5x5的滤波器。 sigmaX和sigmaY: 分别表示在X轴和Y轴方向上的标准差。这些值与滤波器大小相同。默认情况下它们都等于0,这意味着没有高斯模糊。 dst: 输出图像通常是一个NumPy数组。如果为None,则会创建一个新的数组来存储结果。 公式 特点 对高斯噪声有很好的平滑效果。 相比于均值滤波高斯滤波能更好地保留图像的边缘信息。 计算复杂度较高。
4、中值滤波Median Filtering 中值滤波是一种非线性滤波方法它通过计算图像中每个像素周围邻域的中值来替代该像素的值。中值滤波器通常使用一个固定大小的窗口在图像上滑动窗口内的所有像素值按大小排序后取中间值作为中心像素的新值。 cv2.medianBlur(src, ksize[, dst]) src: 输入图像。 ksize: 滤波器的大小它是一个整数表示在水平和垂直方向上的像素数量。例如5表示一个5x5的滤波器。 dst: 输出图像通常是一个NumPy数组。如果为None,则会创建一个新的数组来存储结果。 公式 特点 对椒盐噪声脉冲噪声有很好的去除效果。 不会模糊图像的边缘。 计算复杂度较高。
import numpy as np
# 定义添加椒盐噪声的函数
def add_peppersalt_noise(image,n):result image.copy()h,w image.shape[:2]for i in range(n):x np.random.randint(1,h)y np.random.randint(1,w)if np.random.randint(0,2)0:result[x,y]0else:result[x,y]255return resultcat cv2.imread(./images/cat.jpg)
cv2.imshow(cat,cat)
cv2.waitKey(0)
noise add_peppersalt_noise(cat,10000)
cv2.imshow(noise,noise)
cv2.waitKey(0)
# 均值滤波
# 3*3卷积核
blur_cat cv2.blur(noise,(3,3))
cv2.imshow(3*3,blur_cat)
cv2.waitKey(0)
# 5*5卷积核
blur_cat1 cv2.blur(noise,(5,5))
cv2.imshow(5*5,blur_cat1)
cv2.waitKey(0)# 方框滤波
box_Filter cv2.boxFilter(noise,-1,(3,3),normalizeTrue)
cv2.imshow(box_Filter,box_Filter)
cv2.waitKey(0)
box_Filter1 cv2.boxFilter(noise,-1,(3,3),normalizeFalse)
cv2.imshow(box_Filter1,box_Filter1)
cv2.waitKey(0)# 高斯滤波
Gaussian_cat cv2.GaussianBlur(noise,(3,3),1)
cv2.imshow(Gaussian_cat,Gaussian_cat)
cv2.waitKey(0)# 中值滤波
median_cat cv2.medianBlur(noise,3)
cv2.imshow(median_cat,median_cat)
cv2.waitKey(0)21、图像形态学操作
1、图像腐蚀 cv2. erode(src, kernel, dst,anchor,iterations,borderType,borderValue) src: 输入的图像 kernel: 用于腐蚀的结构元件如果element Mat()则使用3 × 3的矩形结构单元。 dst: 它是与src相同大小和类型的输出图像。 iterations: 腐蚀操作的迭代次数默认为1。次数越多, 腐蚀操作执行的次数越多,腐蚀效果越明显 # 图像腐蚀
sun cv2.imread(r./images/sun.png)
cv2.imshow(sun,sun)
cv2.waitKey(0)
kernel np.ones((3,3),np.uint8)
erosion_1 cv2.erode(sun,kernel,iterations1)
cv2.imshow(erosion_1,erosion_1)
cv2.waitKey(0) 2、图像膨胀 cv2.dilate(img, kernel, iteration) img 目标图片 kernel 进行操作的内核默认为3×3的矩阵 iterations 膨胀次数默认为1 # 图像膨胀
wenzi cv2.imread(r./images/wenzi.png)
cv2.imshow(wenzi,wenzi)
cv2.waitKey(0)
kernel np.ones((3,3),np.uint8)
wenzi_new cv2.dilate(wenzi,kernel,iterations1)
cv2.imshow(wenzi_new,wenzi_new)
cv2.waitKey(0) 3、开运算先腐蚀后膨胀
# 开运算先腐蚀后膨胀
zhiwen cv2.imread(r./images/zhiwen.png)
cv2.imshow(zhiwen,zhiwen)
cv2.waitKey(0)
kernel np.ones((2,2),np.uint8)
zhiwen_new cv2.morphologyEx(zhiwen,cv2.MORPH_OPEN,kernel)
cv2.imshow(zhiwen_new,zhiwen_new)
cv2.waitKey(0) 4、闭运算先膨胀后腐蚀
# 闭运算先膨胀后腐蚀
zhiwen_duan cv2.imread(r./images/zhiwen_duan.png)
cv2.imshow(zhiwen_duan,zhiwen_duan)
cv2.waitKey(0)
kernel np.ones((2,2),np.uint8)
zhiwen_duan_new cv2.morphologyEx(zhiwen_duan,cv2.MORPH_CLOSE,kernel)
cv2.imshow(zhiwen_duan_new,zhiwen_duan_new)
cv2.waitKey(0)