今天学习opencv对图片的常见处理操作包括图片的打码组合放缩加法运算加权运算以及图片的模糊处理平滑处理1、图片打码代码1234567importcv2importnumpy as np# 图片打码acv2.imread(rimg.png)a[100:200,200:300]np.random.randint(0,256,(100,100,3))#矩阵赋值必须是相同大小cv2.imshow(masaike,a)(100,100,3)表示生成100行100列三通道的三维数组。运行结果2、图片组合和缩放代码12345678910111213141516171819importcv2acv2.imread(img_1.png)bcv2.imread(img.png)b[20:100,20:100]a[20:100,20:100]#注意矩阵的大小必须要统一。cv2.imshow(b,b)cv2.imshow(a,a)# 图片缩放cv2.resize# 用于调整图像的大小。它有以下几个参数# src:要调整大小的输入图像可以是numpy数组、PIL图像或其他类型。# dsize:输出图像的大小可以是一个元组例如(宽高)或者使用整数标量来缩放原始图像。如果dsize为None则根据scalex和scaley# fx:沿x轴的缩放系数。# fy:沿y轴的缩放系数。acv2.imread(img.png)# a_new cv2.resize(a,(600,200)) # 宽、高a_newcv2.resize(a,dsizeNone,fx1.5,fy0.5)cv2.imshow(a1,a)cv2.imshow(a_new,a_new)cv2.waitKey(0)cv2.destroyAllWindows()运行结果3、图片运算代码12345678910111213141516171819202122232425262728293031323334353637383940importcv2---------图像运算---------# 图像加法运算# 对于号运算当对图像a图像b进行加法求和时遵循以下规则# 当某位置像素相加得到的数值小于255时该位置数值为两图像该位置像素相加之和# 当某位置像素相加得到的数值大于255时该位置数值将截断结果并将其减去 256 例如相加后是260实际是260-2564acv2.imread(img.png)bcv2.imread(img_1.png)ca10#图片cv2.imshow(yuan,a)cv2.imshow(a10,c)cv2.waitKey(0)ca[50:100,50:100]b[50:100,50:100]cv2.imshow(ab,c)cv2.waitKey(0)# 对于cv2.add()运算当对图像a图像b进行加法求和时遵循以下规则# 当某位置像素相加得到的数值小于255时该位置数值为两图像该位置像素相加之和# 当某位置像素相加得到的数值大于255时该位置数值为255acv2.imread(img.png)bcv2.imread(img_1.png)bcv2.resize(b, (100,100))acv2.resize(a, dsize(100,100))ccv2.add(a,b)#也可以使用使用cv2.imshow(a add b,c)cv2.waitKey(0)# 图像加权运算# 就是在计算两幅图像的像素值之和时将每幅图像的权重考虑进来可以用公式表示为dstsrc1×αsrc2×βγacv2.imread(img.png)bcv2.imread(img_1.png)bcv2.resize(b, dsize(400,400))acv2.resize(a, dsize(400,400))#ccv2.addWeighted(a,0.5,b,0.5,10)# 10:图像的亮度值常数将添加到加权和上cv2.imshow(addWeighted,c)cv2.waitKey(0)cv2.destroyAllWindows()运行结果4、平滑处理模糊处理选取一个像素点一附近的像素点代替代替方式是使用滤波器滤波器是一个卷积核通过卷积核实现均值中值等运算。代码给加入噪声的图片进行平滑处理消除噪声我们看下集中处理方式的用法和效果12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788---------图像平滑处理---------# 图像平滑smoothing也称为模糊处理bluring# 通过消除图像中的噪声或细节来使图像看起来更为模糊从而实现平滑效果# 可以用来压制、弱化、消除图像中的细节、突变和噪声。# 下面是常用的一些滤波器# 均值滤波 - blur函数# 方框滤波 - boxFilter函数# 高斯滤波-GaussianBlur函数# 中值滤波-medianBlur函数# dstcv2.blur(src,ksize,anchor,borderType)# dst是返回值# src是需要处理的图像# ksize是滤波核卷积核的大小# anchor是锚点默认值是-1,-1一般无需更改# borderType是边界样式一般无需更改# 一般情况下使用dstcv2.blur(src,ksize)即可importcv2importnumpy as np# 1个用法defadd_peppersalt_noise(image, n10000):resultimage.copy()h, wimage.shape[:2]# 获取图片的高和宽foriinrange(n):# 生成n个椒盐噪声xnp.random.randint(0, h)ynp.random.randint(0, w)ifnp.random.randint(0,2)0:result[x, y]0else:result[x,y]255returnresult# ##imagecv2.imread(img.png)cv2.imshow(yuan,image)cv2.waitKey(0)noiseadd_peppersalt_noise(image)cv2.imshow(noise,noise)cv2.waitKey(0)# ## 1、均值滤波 blurblur_1cv2.blur(noise, (3,3))#卷积核为33 效果一般清晰度一般cv2.imshow(blur_1,blur_1)cv2.waitKey(0)blur_2cv2.blur(noise, (63,63))cv2.imshow(blur_2,blur_2)cv2.waitKey(0)#### dstcv2.boxFilter(src,ddepth,ksize,anchor,normalize,borderType式中#### dst是返回值表示进行方框滤波后得到的处理结果。#### src 是需要处理的图像即原始图像。#### ddepth是处理结果图像的图像深度一般使用-1表示与原始图像使用相同的图像深度。可以理解为数据类型#### ksize 是滤波核的大小。滤波核大小是指在滤波处理过程中所选择的邻域图像的高 度和宽度。#### anchor 是锚点指对应哪个区域#### normalize 表示在滤波时是否进行归一化。#### 1.当值为True时归一化用邻域像素值的和除以面积。 此时方框滤波与 均值滤波 效果相同。#### 2.当值为False时不归一化直接使用邻域像素值的和。和255时使用255boxFilter_1cv2.boxFilter(noise,-1, ksize(3,3),normalizeTrue)# 2、方框滤波cv2.imshow(boxFilter_1,boxFilter_1)cv2.waitKey(0)boxFilter_2cv2.boxFilter(noise,-1, ksize(3,3),normalizeFalse)cv2.imshow(boxFilter_2,boxFilter_2)cv2.waitKey(0)#### cv2.GaussianBlur(src, ksize[, sigmaX[, sigmaY[, dst]]])高斯滤波#### 参数说明#### src:输入图像通常是一个NumPy数组。#### ksize:滤波器的大小它是一个元组表示在水平和垂直方向上的像素数量。例如(5, 5)表示一个5x5的滤波器。#### sigmaX和sigmaY:分别表示在X轴和Y轴方向上的标准差。这些值与滤波器大小相同。默认情况下它们都等于0这意味着没有高斯模糊。#### dst:输出图像通常是一个NumPy数组。如果为None则会创建一个新的数组来存储结果。GaussianBcv2.GaussianBlur(noise, ksize(3,3), sigmaX1)#标准差为1标准正太分布。 3、高斯滤波cv2.imshow(GaussianBlur,GaussianB)cv2.waitKey(0)# cv2.medianBlur(src, ksize[, dst]])中值滤波# 参数说明# src:输入图像。# ksize:滤波器的大小它是一个整数表示在水平和垂直方向上的像素数量。例如5表示一个5x5的滤波器。# dst:输出图像通常是一个NumPy数组。如果为None则会创建一个新的数组来存储结果。medianBcv2.medianBlur(noise, ksize3)# 4、中值滤波cv2.imshow(medianBlur,medianB)cv2.waitKey(0)cv2.destroyAllWindows()运行结果以上就是今天给大家分享的图片处理核心知识点图片在计算机中本质是以数组形式存储的其中彩色图片对应 RGB 三通道的数组结构灰度图则是单通道数组。所以我们用 OpenCV 处理图片本质上就是对这些数组进行各类运算和操作。