图像的基本运算
# 图像的读取
img = cv2.imread('img.jpg')
# 图像的显示
cv2.imshow('img',img)
# 图像的生成
img = np.random.randint(0,256,size=[4,4],dtype=np.uint8)
# 图像的融合
dst = cv2.addweighted(img1,0.7,img2,0.3,0)
# 加法运算
img1 = cv2.imread('img1.jpg')
img2 = cv2.imread('img2.jpg')
dst = cv2.add(img1,img2)
cv2.imshow('dst',dst)
# 减法运算
img1 = cv2.imread('img1.jpg')
img2 = cv2.imread('img2.jpg')
dst = cv2.subtract(img1,img2)
cv2.imshow('dst',dst)
# 乘法运算
img1 = cv2.imread('img1.jpg')
img2 = cv2.imread('img2.jpg')
dst = cv2.multiply(img1,img2)
cv2.imshow('dst',dst)
img1 = cv2.imread('img1.jpg')
img2 = cv2.imread('img2.jpg')
dst = cv2.divide(img1,img2)
cv2.imshow('dst',dst)
# 按位与运算,取出掩模内的图像
dst = cv2.bitwise_and(img1,img2)
# 按位或运算,删掉掩模内的图像
dst = cv2.bitwise_or(img1,img2)
# 按位非运算,对图像取反
dst = cv2.bitwise_not(img)
# 按位异或运算
dst = cv2.bitwise_xor(img1,img2)
图像的几何运算
# 图像平移
M = np.float32([[1,0,50],[0,1,30]]
rows,cols = img.shape[0:2]
dst = cv2.warpAffine(img,M,(cols,rows))
# 仿射变换
M = cv2.getAffineTransform(pts1,pts2)
dst = cv2.warpAffine(img,M,(cols,rows))
# 图像缩放
dst1 = cv2.resize(img,None,fx=1.2,fy=1.2)
height,width = 160,160
dst2 = cv2.resize(img,(height,width))
# 图像旋转
rows,cols = img.shape[0:2]
M = cv2.getRotationMatrix2D((cols/2,rows/2),45,1)
# 镜像变换
img1 = cv2.flip(img,0) # 绕X轴翻转
img2 = cv2.flip(img,1) # 绕Y轴翻转
img3 = cv2.flip(img,-1) # 绕XY轴翻转
# 透视变换
M = cv2.getPerspectiveTransform(pts1,pts2)
dst = cv2.warpPerspective(img,M,(640,400))
彩色图像的分离与合并
# 彩色图像的分离
b,g,r = cv2.split(img)
cv2.imshow('BLUE',b)
# 彩色图像的合并
merged = cv2.merge([b,g,r])
cv2.imshow('merged',merged)
# 颜色空间转换
# RGB:红、绿、蓝。
# HSV:色调(Hue)、饱和度(Saturation)、亮度(Value)。
# GRAY:灰度图像。
# 将图像从 RGB 转换到 HSV
img = cv2.cvtColor(img,cv2.COLOR_RGB2HSV)
# 将图像从 RGB 转换到灰度
img = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
直方图均衡化
# 直方图均衡化
img = cv2.imread('img.jpg')
dst = cv2.equalHist(img)
理解滤波原理
# 滤波的核心原理是通过卷积操作,将图像与一个滤波器进行卷积运算,从而改变图像的像素值。
# 根据代码判断滤波方法:
# cv2.blur():均值滤波。
# cv2.boxFilter():方框滤波。
# cv2.GaussianBlur():高斯滤波。
# cv2.medianBlur():中值滤波。
# cv2.bilateralFilter():双边滤波。
# cv2.Laplacian():拉普拉斯滤波。
# cv2.filter2D():自定义滤波。
滤波过程会对图像产生以下影响:
平滑效果
- 均值滤波:对图像进行整体平滑,但会模糊边缘。
- 高斯滤波:相比均值滤波,更好地保留边缘信息,因为权重按照高斯分布。
- 中值滤波:对椒盐噪声非常有效,但可能使图像稍微模糊。
- 双边滤波:在平滑时更好地保留边缘信息,但计算复杂度较高。
边缘保留
- 高斯滤波和双边滤波比均值滤波更好地保留边缘信息。
- 中值滤波由于取中值,不会受到极端值(噪声)的影响,因此对边缘的保留效果较好。
噪声去除
- 均值滤波和高斯滤波对高斯噪声有较好的去除效果。
- 中值滤波对椒盐噪声(随机出现的极端值)非常有效。
- 双边滤波对噪声去除和边缘保留有较好的平衡。
计算复杂度
- 均值滤波和高斯滤波计算速度较快。
- 中值滤波在计算中值时需要排序,速度稍慢。
- 双边滤波计算复杂度最高,因为它需要同时考虑空间距离和颜色差异。
锐化效果
- 锐化滤波(拉普拉斯算子)可以增强图像的边缘,但可能会放大噪声。
图像复原与逆滤波
图像复原是图像处理中的一个重要领域,旨在从受损的图像中恢复出原始图像。逆滤波是图像复原中的一种经典方法,主要用于从退化图像中恢复原始图像,退化过程可以用一个退化函数来表示,逆滤波的目标是通过逆运算恢复原始图像。
霍夫变换
霍夫变换的核心思想是:将图像空间中的形状问题转换为参数空间中的投票问题。通过在参数空间中寻找峰值,可以确定图像空间中的几何形状。
彩色图像直方图
# 绘制直方图
dst = cv2.calcHist([img[:,:,0]],[0],None,[256],[0,256])
plt.plot(dst,color='b')