3小时精通opencv(二)图片的常用操作

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方向上的高斯核标准偏差

具体的高斯核计算过程参考这篇博文
高斯滤波的简单描述: 用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

3小时精通opencv(二)图片的常用操作_第1张图片

边缘检测

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边缘检测细节参考博文

threshold1threshold2 的值较小时,将捕获更多的边缘信息。
3小时精通opencv(二)图片的常用操作_第2张图片

膨胀函数

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.使二值图像扩大一圈
腐蚀与膨胀参考博文

3小时精通opencv(二)图片的常用操作_第3张图片

腐蚀函数

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.使二值图像减小一圈
腐蚀与膨胀参考博文

3小时精通opencv(二)图片的常用操作_第4张图片

整体代码

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)

你可能感兴趣的:(准研究生的备考生活,深度学习,opencv,计算机视觉,图像处理)