opencvdrawcontours的简单介绍
本篇文章给大家谈谈opencvdrawcontours,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Python-opencv识别铅笔缺陷?
- 2、【python】opencv库中cv2.findContours()和cv2.drawContours()函数
- 3、目标跟踪(5)使用 Opencv 和 Python 进行对象跟踪
Python-opencv识别铅笔缺陷?
可以使用Python和OpenCV库实现铅笔缺陷的识别。以下是一些基本的步骤:
加载图像:使用OpenCV中的cv2.imread()函数加载铅笔图像。
图像预处理:对图像进行预处理以提高识别效果。可以使用OpenCV中的cv2.GaussianBlur()函数进行高斯模糊处理,以减少图像中的噪声;使用cv2.Canny()函数进行边缘检测,以便更好地检测铅笔的轮廓。
寻找铅笔轮廓:使用cv2.findContours()函数查找铅笔的轮廓。
过滤轮廓:通过一些条件过滤掉不需要的轮廓,比如面积过小或者不规则的轮廓。
分类缺陷:使用分类器对铅笔缺陷进行分类。可以使用机器学习技术训练分类器,或者使用已经训练好的分类器,如Haar级联分类器或卷积神游饥经网络(神行返CNN)。
标记缺陷:对被分类为缺陷的轮廓进行标记,可以使用OpenCV中的cv2.rectangle()函数绘制矩形框或者使用cv2.drawContours()函数绘制轮廓。
显示结果:使用OpenCV中的cv2.imshow()函带悄数显示结果图像,或者将结果保存到文件中。
需要注意的是,铅笔缺陷的识别是一个复杂的任务,需要对图像进行多方面的处理和分析。具体的实现方法需要根据具体的需求和应用场景进行调整和优化。
【python】opencv库中cv2.findContours()和cv2.drawContours()函数
一.查找轮廓
cv2.findContours()
[image,] contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
轮廓检索搭迹方式:
轮扒和廓近似方法:
二.绘制轮廓春枝盯
cv2.drawContours()
cv2.drawContours(img, contours, -1, (0, 0, 255), 2)
目标跟踪(5)使用 Opencv 和 Python 进行对象跟踪
在本教程中,我们将学习如何基于 Opencv 和 Python 实现对象跟踪。
首先必须明确目标检测和目标跟踪有什么区别:
我们将首先讨论对象检测,然后讨论如何将对象跟踪应用于检测。
可能有不同的应用,例如,计算某个区域有多少人,检查传送带上有多少物体通过,或者计算高速公路上的车辆。
当然,看过本教程后,您会很容易地想到数以千计的想孙腔没法应用于现实生活或可能应用于工业。
在本教程中,我们将使用 3 个文件:
首先我们需要调用highway.mp4文件并创建一个mask:
正如您在示例代码中看到的,我们还使用了 createBackgroundSubtractorMOG2 函数,该函数返回背景比率(background ratio),然后创建mask。
mask可视化结果:
但是,如您所见,图像中有很多噪点。因此,让我们通过删除所有较小的元素来改进提取,并将我们的注意力集中在大于某个面积的对象上。
使用 OpenCV 的cv2.drawContours函数绘制轮廓,我们得到了这个结果。
就本教程而言,分析整个窗口并不重要。我们只对计算在某个点通过的所有车辆感兴趣,因此,我们必须定义一个感兴趣的区域 ROI 并仅在该区域应用mask。
结果可视化如下:
函数 cv2.createBackgroundSubtractorMOG2 是在开始时添加的,没有定义参数,现在让我们看看如何进一步改进我们的结果。history是第一个参数,在这种情况下,它设置为 100,因为相机是固定的。varThreshold改为 40,因为该值越低,误报的可能性就越大。在这种情况下,我们只对较大的对象感兴趣。
在继续处理矩形之前,我们对图像进行了进一步的清理。为此,阈值函数就派上用场了。从我们的mask开始,我们告诉它我们只想显示白色或黑色值,因此通过编写254, 255,只会考虑 254 和 255 之间的值。
然后我们将找到的对象的坐标插入到 if 条件中并绘制矩形
这是最终结果:
我们现在只需导入和集成跟踪功能。
一旦创建了对象,我们必须获取边界框的每个位置并将它们插入到单个数组中。
通过在屏幕上显示结果,您可以看到所有通过 ROI 的通道是如何被识别的,则纳以及它们的位置是如何插入到特定的数组中的。显然,识别的摩托车越多,我们的数组就越大。
现在让我们将带圆行有位置的数组传递给tracker.update()。我们将再次获得一个包含位置的数组,但此外,将为每个对象分配一个唯一的 ID。
从代码中可以看出,我们可以使用 for 循环分析所有内容。此时我们只需要绘制矩形并显示车辆 ID。
在图像中,您可以看到结果
main.py
从视频中也可以看到,我们已经获得了我们在本教程开始时设置的结果。
但是,您必须将其视为练习或起点,因为关于这个主题有很多话要说,而本教程的目的只是让您了解对象跟踪的原理。
如果你想将 Object Tracking 集成到你的项目中,你应该使用更可靠和先进的对象检测方法,以及跟踪方法。
完整代码地址:私信“333”直接获取或者「链接」
[img]关于opencvdrawcontours和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。