PyQt5之QGraphics 011 QGraphicsItem之绘画OpenCV contours
QPainterPath可以画出各种各样的图形,以下就是画OpenCV的findcontours的轮廓线。 左上角显示区域所有contours的数量。 先用findContours找到轮廓线,之后就可以用moveTo一点一点画出来。代码如下: """ 有趣的事情 没有结束 2020/4/6 15:53 """ from PyQt5.QtWidgets import (QApplication, QGraphicsItem, QGraphicsScene, QGraphicsView, QPushButton, QLabel, QDi 在PyQt5中,QGraphicsItem模块用于在QGraphicsScene中绘制复杂的图形对象。本教程主要探讨了如何利用QGraphicsItem结合OpenCV的findContours函数来绘制图像的轮廓线。QPainterPath是Qt中的一个关键类,它允许我们创建和操作路径,用于描绘多种几何形状。以下是关于这一主题的详细解释: 1. **QGraphicsItem**: 是QGraphicsView框架的基础组件,它定义了一个在场景中可绘图的对象。你可以自定义这个类以实现自己的图形元素。 2. **QPainterPath**: 是一个用于描述2D路径的类,它可以用来绘制复杂的形状,如曲线、直线和贝塞尔曲线等。在这个例子中,QPainterPath用于构建从OpenCV找到的轮廓线。 3. **OpenCV的findContours**: 这是OpenCV库中的一个函数,用于在二值图像中找到物体的边界。它返回一个轮廓列表,每个轮廓都是一个由点组成的多边形。 4. **cv.findContours**: 函数接受三个参数:二值图像、检索模式(在这里使用了`cv.RETR_EXTERNAL`,表示只获取最外层轮廓)和存储方法(`cv.CHAIN_APPROX_SIMPLE`,表示压缩水平、垂直和平行于图像边缘的相邻像素)。 5. **QGraphicsScene和QGraphicsView**: 分别用于管理场景中的图形元素和提供用户交互视图。在这个例子中,它们用于展示找到的轮廓。 6. **QGraphicsScene.addGraphicsItem**: 用于将QGraphicsItem添加到场景中,使得这些图形可以在QGraphicsView中显示。 7. **updateCountour**方法: 更新ROI(感兴趣区域)的坐标,如果新的坐标超出了图像的边界,则不做处理。这种方法允许用户通过移动ROI来改变要分析的区域。 8. **setContours**方法: 这是核心功能,它根据ROI提取图像的一部分,进行模糊处理、阈值处理以及边缘检测(Canny算法)。然后使用`cv.findContours`找出轮廓,将其转换为QPainterPath,并添加到QGraphicsItem的路径中。 9. **boundingRect**方法: 必须重写此方法以返回QGraphicsItem的边界框,这有助于QGraphicsView正确地绘制和更新图形。 10. **QPen和QBrush**: 分别用于设置线条样式和填充样式。在这个例子中,轮廓线的颜色是随机的,通过`random.randint()`生成。 11. **QGraphicsView和QGraphicsScene的交互**: 在实际应用中,可能还需要添加用户界面元素,如按钮和标签,以便与QGraphicsView交互。例如,可以添加一个按钮来触发轮廓检测,或者显示当前轮廓的数量。 这个示例展示了如何将OpenCV的图像处理能力与PyQt5的图形界面结合,实现轮廓的可视化。通过这种方式,我们可以创建出强大的交互式图像分析工具,不仅可以显示图像,还可以让用户动态调整分析区域,实时查看轮廓变化。这种技术在图像处理、机器学习和计算机视觉相关的应用程序中非常有用。
- 粉丝: 2
- 资源: 898
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助