python opencv实现目标外接图形

下面是详细的"Python OpenCV实现目标外接图形"攻略。

1. 安装OpenCV库

在终端中输入以下命令安装OpenCV:

pip install opencv-python

2. 导入OpenCV模块

import cv2
import numpy as np

3. 加载图像

img = cv2.imread('image.jpg')

4. 对图像进行预处理

在进行目标检测之前,需要对图像进行预处理,例如灰度化、滤波等操作。以下代码展示了如何将图像灰度化。

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

5. 创建目标外接图形

使用OpenCV的findContours()函数查找兴趣区域的轮廓。然后,使用approxPolyDP()函数查找轮廓近似的多边形,并将其与原始图像进行比较。最后,可以使用drawContours()函数在图像上绘制目标外接图形。以下是示例代码:

# 找到轮廓
contours, hierarchy = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 获取轮廓中的目标形状并绘制外接图形
for contour in contours:
    peri = cv2.arcLength(contour, True)
    approx = cv2.approxPolyDP(contour, 0.02 * peri, True)
    cv2.drawContours(img, [approx], -1, (0, 255, 0), 2)

在上述代码中,使用approxPolyDP()函数以2%周长的精度计算轮廓的近似多边形。将绘制出的轮廓与原始图像一起保存可能看起来像以下内容:

cv2.imwrite('output.jpg', img)

示例1:检测并绘制矩形框

以下是如何检测并绘制矩形框的示例。假设我们要检测并框选出图像中的红色矩形。

img = cv2.imread('image.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

lower_red = np.array([0, 50, 50])
upper_red = np.array([10, 255, 255])
mask1 = cv2.inRange(hsv, lower_red, upper_red)

lower_red = np.array([170, 50, 50])
upper_red = np.array([180, 255, 255])
mask2 = cv2.inRange(hsv, lower_red, upper_red)

mask = mask1 + mask2

# 膨胀操作
kernel = np.ones((5, 5), np.uint8)
dilation = cv2.dilate(mask, kernel, iterations=1)

# 找到目标轮廓
contours, hierarchy = cv2.findContours(dilation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
    x, y, w, h = cv2.boundingRect(contour)
    if w * h > 100:
        cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imwrite('output.jpg', img)

示例2:检测并绘制圆形

以下是如何检测并绘制圆形的示例。我们要检测并框选出图像中的红色圆形。

img = cv2.imread('image.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

lower_red = np.array([0, 50, 50])
upper_red = np.array([10, 255, 255])
mask1 = cv2.inRange(hsv, lower_red, upper_red)

lower_red = np.array([170, 50, 50])
upper_red = np.array([180, 255, 255])
mask2 = cv2.inRange(hsv, lower_red, upper_red)

mask = mask1 + mask2

# 膨胀操作
kernel = np.ones((5, 5), np.uint8)
dilation = cv2.dilate(mask, kernel, iterations=1)

# 查找检测到的圆形
circles = cv2.HoughCircles(dilation, cv2.HOUGH_GRADIENT, 1, 50, param1=100, param2=30, minRadius=0, maxRadius=0)
if circles is not None:
    circles = np.round(circles[0, :]).astype("int")
    for (x, y, r) in circles:
        cv2.circle(img, (x, y), r, (0, 255, 0), 2)

cv2.imwrite('output.jpg', img)

这两个示例演示了如何使用OpenCV实现检测和绘制目标外接图形的功能。当然,这只是OpenCV提供的功能之一,您还可以自己制定算法进行目标外接图形的处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python opencv实现目标外接图形 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • pytorch加载预训练模型与自己模型不匹配的解决方案

    加载预训练模型是深度学习中常用的技巧之一,可以利用预训练模型的权重来加快模型的训练速度,同时也提高了模型的精度。然而,有时候我们可能需要在一个不同的任务中使用一个预训练的模型,而这个预训练模型可能与我们自己定义的模型结构不匹配的情况,这时我们就需要一些解决方案。下面我将介绍几种PyTorch加载预训练模型与自己模型不匹配的解决方案。 方案一:从预训练模型中提…

    人工智能概论 2023年5月25日
    00
  • 制作nginx的RPM包教程

    Sure. 制作 nginx 的 RPM 包,主要分为以下几个步骤: 准备环境 下载和解压源代码 安装必要的依赖包 根据实际需求进行配置 打包成 rpm 安装包 下面,我将分别为您详细讲解每个步骤: 第一步:准备环境 需要在 Linux 系统中执行打包操作,因此需要有一个 Linux 环境。另外,需要安装打包需要用到的工具,如 rpmbuild 工具等。具体…

    人工智能概览 2023年5月25日
    00
  • Django+RestFramework API接口及接口文档并返回json数据操作

    下面是“Django+RestFramework API接口及接口文档并返回json数据操作”的完整攻略: 一、前置条件 在使用Django RestFramework进行接口开发之前,需要先安装以下软件: Python 3.x Django Django RestFramework 二、创建Django项目 首先,我们需要创建一个Django项目。 可以使…

    人工智能概览 2023年5月25日
    00
  • 图片文字识别(OCR)插件Ocrad.js教程

    图片文字识别(OCR)插件Ocrad.js教程 简介 Ocrad.js是一款基于Javascript的图像识别(OCR)库,可以用于识别不同类型的数字和字母的图像,包括但不限于印刷体和手写体。Ocrad.js库可以在浏览器和服务器中使用。 安装和使用 前置要求 在使用Ocrad.js之前,您需要确保您的项目中安装了Node.js和NPM包管理器。 安装 您可…

    人工智能概论 2023年5月25日
    00
  • 一个基于flask的web应用诞生 用户注册功能开发(5)

    本文将详细讲解“一个基于flask的web应用诞生 用户注册功能开发(5)”的完整攻略,主要以代码示例的方式展示开发过程。 一、更新注册表单的模板 首先我们需要更新注册表单的模板,使其能够显示用户名和密码的错误信息。在templates/register.html中,添加以下代码: {% extends ‘base.html’ %} {% block con…

    人工智能概论 2023年5月25日
    00
  • JAVA代码实现MongoDB动态条件之分页查询

    下面是详细讲解 “JAVA代码实现MongoDB动态条件之分页查询” 的完整攻略。 问题描述 MongoDB是一个文档数据库,它支持强大的查询功能。在实际应用中,我们常常需要对MongoDB进行分页查询,并且还需要支持动态查询条件,比如根据关键字或者是查询时间范围进行过滤。 解决方案 Java开发者可以通过集成Jongo库来操作MongoDB数据库,其中Jo…

    人工智能概论 2023年5月25日
    00
  • 单点登录的三种方式和JWT的介绍与使用

    单点登录(Single Sign-On, SSO)是指在多个应用系统中,用户只需要登录一次,就可以访问所有相互信任的应用系统资源。 实现单点登录有三种方式: 接口集成方式 这种方式是指使用后端服务的方式进行用户认证,前端应用只需将用户凭证发送至后端服务进行认证,认证通过后返回相关的用户信息至前端。此方式需要在前后端分离场景中使用。 Token方式 这种方式是…

    人工智能概览 2023年5月25日
    00
  • Python flask框架实现浏览器点击自定义跳转页面

    下面我将详细讲解Python Flask框架实现浏览器点击自定义跳转页面的完整攻略。 一、搭建Flask环境 要使用Flask框架,需要先安装Flask,并在本地搭建好Flask环境。具体的安装方法和环境搭建方法可以参考Flask官方文档。下面是安装Flask的简单步骤: 使用pip安装Flask:pip install Flask 创建Flask应用:在代…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部