实验一 边缘提取

一、 实验目的
利用opencv编写实现下图的边缘提取
在这里插入图片描述
二、实验内容
利用opencv python实现边缘提取
(1)在python安装opencv库
如果安装了python,直接安装:pip install opencv-python
在这里插入图片描述
测试是否安装成功:python命令行输入import cv2,没有报错即成功
在这里插入图片描述
(2)编写代码
代码如下:

import cv2 

#导入图片
img = cv2.imread('E:\\test.bmp')
cv2.namedWindow("image",cv2.WINDOW_AUTOSIZE)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #将图像转为灰度图像
gray = cv2.GaussianBlur(gray,(5,5),0)       #将图像进行高斯模糊
edged = cv2.Canny(gray,75,200)              #Canny边缘检测
#反色
def inverse_color(edged):
    height,width = edged.shape
    img2 = edged.copy()
    for i in range(height):
        for j in range(width):
            img2[i,j] = (255-edged[i,j])
    return img2
#显示图片
cv2.imshow('image',inverse_color(edged))
cv2.waitKey(0)
cv2.destroyAllWindows()

三、 运行结果
在这里插入图片描述
四、 问题及解决方法
(1)在下载opencv-python库时,可能因为网络超时而失败,这时可以下载whl文件,在命令提示符里输入:“pip install whl文件所在位置的绝对路径”,就会安装成功
Whl文件下载网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv
(2)运行报错,且显示不出图片
在这里插入图片描述
解决办法:
在用到imread函数时,图像文件名索引地址中不能出现任何中文字符,如果在windows系统下,文件名的索引地址的分隔符需要用“\\”而不能用“\”,即“cv2.imread(‘E:\\test.bmp’)”而不是“cv2.imread(‘E:\test.bmp’)”

五、 实验总结
这次实验主要是利用opencv实现图像的边缘提取,一开始我选择的是利用vs来进行编写,可能是因为版本原因,导致总会报错,后来我看到网上有说opencv也提供python的接口,就选择了利用python来实现,在进行边缘提取时,了解了一些新的概念:

  1. 灰度图像:灰度图像(gray image)是每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;但是,灰度图像在黑色与白色之间还有许多级的颜色深度。
  2. 高斯模糊:来减少图像噪声以及降低细节层次,使图片产生模糊效果
  3. Canny()函数:使用Canny算法对对输入图像进行边缘检测,Canny边缘检测的步骤:
    (1)使用高斯滤波,以平滑图像,滤除噪声;
    (2)计算图像中每个像素点的梯度强度和方向;
    (3)应用非极大值抑制,以消除边缘检测带来的杂散响应;
    (4)应用双阈值检测来确定真实的和潜在的边缘;
    (5)通过抑制孤立的弱边缘最终完成边缘检测。
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐