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高斯内核大小, 必须为奇数sigmaXX方向上的高斯核标准偏差
具体的高斯核计算过程参考这篇博文
高斯滤波的简单描述: 用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

边缘检测
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)
                




![给定两个数组x和hp,长度都是N。 x数组一定是有序的,x[i]表示i号怪兽在x轴上的位置 hp数组不要求有序,hp[i]表示i号怪兽的血量](https://img-blog.csdnimg.cn/88500ee2229e45f39e5f371d474bfb33.png)












