前言:
前几日发表了在matlab进行简单的图像边缘处理的文章,后来继续进行了相应的学习,决定还是回归python环境跑一下opencv进行图像边缘检测的处理。对其有兴趣的可以看我上一篇的博客
图像处理边缘处理:Roberts算子和canny算子,对圆与矩阵进行识别_靳小锅er的博客-CSDN博客
图像分析资料:
1.灰度图:
灰度图是只含有黑白颜色,和0~255亮度等级的图片。灰度图具有 存储小,其亮度值就是256色调色板索引号, 从整幅图像的整体和局部的色彩以及亮度等级分布特征来看,灰度图描述与彩色图的描述是一致的特点。因此很多真彩色图片的分析,第一步就是转换为灰度图,然后再进行分析。
2. Sobel算子
sobel算子主要用于获得数字图像的一阶梯度,常见的应用和物理意义是边缘检测。
算子使用两个33的矩阵(图1)算子使用两个33的矩阵(图1)去和原始图片作卷积,分别得到横向G(x)和纵向G(y)的梯度值,如果梯度值大于某一个阈值,则认为该点为边缘点
3.拉普拉斯算子
在图像处理,我们知道经常把Laplace算子作为边缘检测之一,也是工程数学中常用的一种积分变换。将原始图像通过拉普拉斯变换后增强了图像中灰度突变处的对比度,使图像中小的细节部分得到增强并保留了图像的背景色调,使图像的细节比原始图像更加清晰。基于拉普拉斯变换的图像增强已成为图像锐化处理的基本工具。
4.Canny算子
Canny边缘检测的效果是很显著的。相比普通的梯度算法大大抑制了噪声引起的伪边缘,而且是边缘细化,易于后续处理。对于对比度较低的图像,通过调节参数,Canny算法也能有很好的效果。
代码部分:
import cv2
import matplotlib.pyplot as plt
#读取图像信息
img0 = cv2.imread('C:\\Users\\Lenovo\\Desktop\\Pic1_2.jpg')
img1 = cv2.resize(img0, dsize=None, fx = 0.5, fy = 0.5)
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
cv2.imwrite('C:\\Users\\Lenovo\\Desktop\\Gray.jpg',img2) #保存灰度图
h, w = img1.shape[:2]
print(h, w)
cv2.namedWindow("GREY")
cv2.imshow("GREY", img1)
cv2.waitKey(delay = 0)
#Sobel 算子
img3 = cv2.Sobel (img2, cv2.CV_64F, 0, 1, ksize=5)
cv2.namedWindow("Sobel")
cv2.imshow("Sobel", img3)
cv2.waitKey(delay = 0)
#Laplacian 算子
img7 = cv2.Laplacian(img2, cv2.CV_64F)
cv2.namedWindow("Laplacian")
cv2.imshow("Laplacian", img7)
cv2.waitKey(delay = 0)
#canny 算子
img4 = cv2.Canny(img2, 100, 200)
cv2.namedWindow("Canny")
cv2.imshow("Canny", img4)
cv2.waitKey(delay = 0)
撰写代码时遇到的问题:
CV读取图片所在位置失败:
代码效果展示: