3小时精通opencv(二)图片的常用操作
参考视频资源:3h精通Opencv-Python
文章目录
- 3小时精通opencv(二)图片的常用操作
- 灰度图像
- 高斯滤波
- 边缘检测
- 膨胀函数
- 腐蚀函数
- 整体代码
灰度图像
img = cv2.imread('Resources/lena.png')
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('gray', imgGray)
cv2.waitKey(0)
opencv中默认的图像通道是BGR, 所以是COLOR_BGR2GRAY
高斯滤波
img = cv2.imread('Resources/lena.png')
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
cv2.imshow('blur', imgBlur)
cv2.waitKey(0)
高斯滤波适用于消除高斯噪声,广泛应用于图像处理的减噪过程
通常使用前三个参数:
src
: 输入图像ksize
高斯内核大小, 必须为奇数sigmaX
X方向上的高斯核标准偏差
具体的高斯核计算过程参考这篇博文
高斯滤波的简单描述: 用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
边缘检测
import cv2
img = cv2.imread('Resources/lena.png')
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
imgCanny = cv2.Canny(img, 150, 200)
imgCanny2 = cv2.Canny(img, 35, 50)
cv2.imshow('img', img)
cv2.imshow('Canny', imgCanny)
cv2.imshow('Canny2', imgCanny2)
cv2.waitKey(0)
通常使用前三个参数:
image
: 输入图像threshold1
表示处理过程中的第一个阈值threshold2
表示处理过程中的第二个阈值。- 低于阈值1的像素点会被认为不是边缘;
- 高于阈值2的像素点会被认为是边缘;
- 在阈值1和阈值2之间的像素点,若与第2步得到的边缘像素点相邻,则被认为是边缘,否则被认为不是边缘。
Canny边缘检测细节参考博文
threshold1
和 threshold2
的值较小时,将捕获更多的边缘信息。
膨胀函数
import cv2
import numpy as np
img = cv2.imread('Resources/lena.png')
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
imgCanny = cv2.Canny(img, 150, 200)
kernel = np.ones((5, 5), np.uint8)
imgDilation = cv2.dilate(imgCanny, kernel, iterations=1) # 膨胀
cv2.imshow('img', img)
cv2.imshow('Canny', imgCanny)
cv2.imshow('Dilation', imgDilation)
cv2.waitKey(0)
通常使用的参数:
src
: 输入图像kernel
进行操作的内核,默认为3×3的矩阵iterations
腐蚀次数,默认为1
膨胀的原理是在原图的小区域内取局部最大值
用kernel扫描图像的每一个像素;用kernel与其覆盖的二值图像做 “与” 操作;如果都为0,结果图像的该像素为0;否则为1.使二值图像扩大一圈
腐蚀与膨胀参考博文
腐蚀函数
import cv2
import numpy as np
img = cv2.imread('Resources/lena.png')
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
imgCanny = cv2.Canny(img, 150, 200)
kernel = np.ones((5, 5), np.uint8)
imgDilation = cv2.dilate(imgCanny, kernel, iterations=1) # 膨胀
imgEroded = cv2.erode(imgDilation, kernel, iterations=1) # 腐蚀
cv2.imshow('img', img)
cv2.imshow('Canny', imgCanny)
cv2.imshow('Eroded', imgEroded )
cv2.waitKey(0)
通常使用的参数:
src
: 输入图像kernel
进行操作的内核,默认为3×3的矩阵iterations
腐蚀次数,默认为1
腐蚀的原理是在原图的小区域内取局部最小值
用kernel扫描图像的每一个像素;用kernel与其覆盖的二值图像做 “与” 操作;如果都为1,结果图像的该像素为1;否则为0.使二值图像减小一圈
腐蚀与膨胀参考博文
整体代码
import cv2
import numpy as np
# opencv中默认的图像通道是BGR
img = cv2.imread('Resources/lena.png')
kernel = np.ones((5, 5), np.uint8)
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
imgCanny = cv2.Canny(img, 150, 200)
imgDilation = cv2.dilate(imgCanny, kernel, iterations=1) # 膨胀
imgEroded = cv2.erode(imgDilation, kernel, iterations=1) # 腐蚀
# cv2.imshow('gray', imgGray)
# cv2.imshow('blur', imgBlur)
cv2.imshow('Canny Image', imgCanny)
cv2.imshow('Dilation Image', imgDilation)
cv2.imshow('Erode Image', imgEroded)
cv2.waitKey(0)