参考视频资源:3h精通Opencv-Python
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
表示处理过程中的第二个阈值。
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)