基于OpenCV的简单边缘检测模型
共 1852字,需浏览 4分钟
·
2020-11-28 12:03
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
本期我们一起看看如何进行图像边缘的检测。边缘检测通常用于理解图像中的对象,帮助机器做出更好的预测。编写边缘检测程序是了解机器如何看待外界的好方法。现在就让我们使用python进行边缘检测吧。
我们将为该项目使用两个主要模块:Numpy,Matplotlib和OpenCV。Matplotlib是一个完整的库,用于在Python中生成静态,动画和交互式可视化。OpenCV是一个高度优化的库,专注于实时应用程序。
OpenCV
OpenCV(开源计算机视觉库)是一个开源计算机视觉和机器学习软件库。OpenCV的构建旨在为计算机视觉应用程序提供通用的基础结构,并加速商业产品中的机器感知。作为BSD许可的产品,OpenCV使企业可以轻松地使用和修改代码。
参考:https : //opencv.org
让我们从安装库开始。
安装库
我们必须安装库,以便我们的程序正常运行。如前所述,我们将只需要两个库。使用PIP库管理器将它们安装在一行中:
pip安装numpy matplotlib opencv-python
安装过程完成后,我们可以将它们导入到我们的代码中。我们将使用Atom文本编辑器完成。
导入cv2
导入numpy作为np
导入matplotlib.pyplot作为plt
边缘检测功能
现在,我们可以转到有趣的部分,在这里我们将编写边缘检测功能。您会惊讶于使用OpenCV软件包如此简单。此OpenCV检测模型也称为Canny边缘检测模型。我们的功能包括三个部分:边缘检测,可视化,最后保存结果。
边缘检测
def simple_edge_detection(image):
edgesdetected = cv2.Canny(image,100,200)
images = [image,edgesdetected]
了解代码:
Canny是我们调用的使用OpenCV进行边缘检测的方法。
Image是函数的参数,这意味着我们将在调用函数时传递图像。这样,您可以轻松地用不同的图像测试程序。
100和200是磁滞阈值的最小值和最大值。
可视化
location = [121,122]
对于loc,zip中的edge_image(位置,图片):
plt.subplot(loc)
plt.imshow(edge_image,cmap ='gray')
了解代码:
绘图部分需要位置数组。
然后,我们同时可视化原始图像和边缘检测图像。
cmap参数用于更改图像的颜色。就我们而言,我们正在将它们转换为灰色。
保存结果
该功能的最后一部分将保存边缘检测图像和比较图。OpenCv和Matplotlib软件包;imwrite和savefig函数都为我们提供了这个功能。在最后一行中,show函数可以向我们显示创建的图。
cv2.imwrite('edge_detected.png',edgesdetected)plt.savefig('edge_plot.png')plt.show()
选择图片
我们要找到一张测试Canny Edge检测程序的图像。下载图像后,请确保将它们放入与项目相同的文件夹中。这将有助于轻松地将它们导入程序。让我们定义一个图像变量并导入图像。这是使用OpenCV读取图像的方法:
img = cv2.imread('test_image.jpg',0)
这是我将测试模型的示例图像:
运行程序
是时候运行程序了。到目前为止,没有任何东西可以触发该功能。我们必须调用函数也不要忘记将图像作为参数传递进去:
simple_edge_detection(img)
结果如下:
我们已经使用Python创建了边缘检测的代码。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~