博客
关于我
OpenCV 4.1.0版drawContours
阅读量:802 次
发布时间:2023-02-23

本文共 1805 字,大约阅读时间需要 6 分钟。

OpenCV 是一个强大的图像处理库,其 cv2.drawContours 方法可以用来绘制图像轮廓。本文将介绍如何使用 OpenCV 进行轮廓绘制,包括基本步骤和代码示例。

基本步骤

  • 导入 OpenCV

    首先需要安装 OpenCV 库并导入它。

    import cv2
  • 读取图片

    使用 cv2.imread 读取图片文件。

    img = cv2.imread('input.jpg')
  • 获取轮廓

    使用 cv2.findContours 方法获取图片中的轮廓。

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  contours, _ = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  • 绘制轮廓

    使用 cv2.drawContours 方法在图片上绘制轮廓。

    cv2.drawContours(img, contours, -1, (0, 255, 0), 3)
  • 显示或保存结果

    最后可以选择在屏幕上显示图片或将其保存为新文件。

    cv2.imshow('Contours', img)  cv2.waitKey(0)  cv2.destroyAllWindows()

    或者保存为新文件:

    cv2.imwrite('output.jpg', img)
  • 代码示例

    以下是一个完整的绘制轮廓的函数示例:

    import cv2def draw_contours(image_path):    img = cv2.imread(image_path)    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    contours, _ = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)    cv2.drawContours(img, contours, -1, (0, 255, 0), 3)    cv2.imshow('Contours', img)    cv2.waitKey(0)    cv2.destroyAllWindows()

    测试用例

    假设你有一个名为 test_image.jpg 的图片,包含多个形状的轮廓。运行上述代码后,你将在屏幕上看到原始图片和带有轮廓的修改后的图片。

    人工智能与 OpenCV 结合应用

    • 物体检测

      OpenCV 提供了 cv2.findContourscv2.approxPolyDP 等工具,可结合机器学习算法(如 SVM 或神经网络)进行物体检测。例如,可以训练分类器识别特定形状(如圆形、矩形等)。

    • 图像分割

      在图像分割中,OpenCV 提供了多种方法,包括基于轮廓的分割。通过找到连通区域并使用 cv2.approxPolyDP 逼近轮廓,可以将图片分割为多个具有特定形状的区域。

    例如,以下是一个简单的图像分割示例:

    import cv2def split_image(image_path):    img = cv2.imread(image_path)    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    contours, _ = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)    for contour in contours:        epsilon = 0.01 * cv2.arcLength(contour, True)        approx = cv2.approxPolyDP(contour, epsilon, True)        if len(approx) == 4:            x, y, w, h = cv2.boundingRect(approx)            roi = img[y:y+h, x:x+w]            cv2.imshow('ROI', roi)            cv2.waitKey(0)

    这个示例处理了近似轮廓长度为4(可能为矩形)的区域。

    转载地址:http://qosfk.baihongyu.com/

    你可能感兴趣的文章
    oracle获取数据库表、字段、注释、约束等
    查看>>
    ThreeJS入门(163):THREE.TextureLoader 知识详解,示例代码
    查看>>
    Oracle表的操作
    查看>>
    Oracle表空间、用户的创建及导入导出
    查看>>
    oracle表空间查询维护命令大全之三(暂时表空间)史上最全
    查看>>
    oracle表访问方式
    查看>>
    Oracle触发器
    查看>>
    oracle触发器
    查看>>
    oracle触发器
    查看>>
    Oracle计划将ZGC项目提交给OpenJDK
    查看>>
    oracle账号共享
    查看>>
    Oracle重置序列(不删除重建方式)
    查看>>
    Oracle闪回技术(Flashback)
    查看>>
    oracle隐含参数的查看与修改
    查看>>
    oracle零碎要点---ip地址问题,服务问题,系统默认密码问题
    查看>>
    oracle零碎要点---oracle em的web访问地址忘了
    查看>>
    Oracle零碎要点---多表联合查询,收集数据库基本资料
    查看>>
    Oracle静默安装
    查看>>
    【Bert101】变压器模型背后的复杂数学【02/4】
    查看>>
    Oracle面试题:Oracle中truncate和delete的区别
    查看>>