首页 > 其他分享 >open CV识别矩形

open CV识别矩形

时间:2024-04-07 18:02:58浏览次数:22  
标签:approx 矩形 image cv2 contour 轮廓 open CV

要使用OpenCV库在一幅灰度图像中识别所有的矩形,你可以采取以下步骤:

  1. 加载图像并将其转换为灰度图像。
  2. 使用边缘检测算法(如Canny边缘检测)检测图像中的边缘。
  3. 使用轮廓检测函数(cv2.findContours())找到所有的轮廓。
  4. 对每个检测到的轮廓进行逼近以获得矩形。
  5. 过滤掉太小或太大的矩形。
  6. 绘制矩形并显示结果。

下面是一个基本的Python示例代码:

import cv2
import numpy as np

# 加载图像
image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用Canny边缘检测
edges = cv2.Canny(gray, 50, 150, apertureSize=3)

# 执行轮廓检测
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 遍历轮廓
for contour in contours:
    # 计算轮廓的周长
    perimeter = cv2.arcLength(contour, True)
    # 近似轮廓
    approx = cv2.approxPolyDP(contour, 0.02 * perimeter, True)
    # 如果近似轮廓有四个顶点,则认为它是一个矩形
    if len(approx) == 4:
        # 绘制矩形
        cv2.drawContours(image, [approx], 0, (0, 255, 0), 2)

# 显示结果
cv2.imshow('Rectangles', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

确保将 'image.jpg' 替换为你要处理的图像的路径。这个代码会在图像中找到所有的矩形并用绿色的线框标出。

但上述代码在执行过程中出现误判,对于一些明显不是矩形的地方仍然被识别为了矩形,对上述代码优化以解决此问题

你可以考虑以下几种方法:

  1. 添加面积限制: 可以排除面积太小或太大的轮廓,以减少误判。
  2. 添加长宽比限制: 可以排除长宽比不符合矩形的轮廓,如过于细长或过于扁平的轮廓。
  3. 添加角度限制: 可以排除倾斜角度太大的轮廓,以减少对非直角矩形的误判。
  4. 更严格的逼近: 考虑调整逼近方法的参数,以获取更接近实际矩形形状的轮廓。

下面是修改后的代码:

import cv2
import numpy as np

# 加载图像
image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用Canny边缘检测
edges = cv2.Canny(gray, 50, 150, apertureSize=3)

# 执行轮廓检测
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 遍历轮廓
for contour in contours:
    # 计算轮廓的面积
    area = cv2.contourArea(contour)
    # 计算轮廓的周长
    perimeter = cv2.arcLength(contour, True)
    # 近似轮廓
    epsilon = 0.02 * perimeter
    approx = cv2.approxPolyDP(contour, epsilon, True)
    # 如果近似轮廓有四个顶点,则认为它是一个矩形
    if len(approx) == 4 and area > 1000 and area < 10000:  # 添加面积限制
        # 获取矩形的边界框
        x, y, w, h = cv2.boundingRect(approx)
        aspect_ratio = float(w) / h
        # 添加长宽比限制
        if aspect_ratio > 0.8 and aspect_ratio < 1.2:
            # 绘制矩形
            cv2.drawContours(image, [approx], 0, (0, 255, 0), 2)

# 显示结果
cv2.imshow('Rectangles', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

这个修改后的代码在轮廓近似之前添加了面积限制,并在识别矩形后添加了长宽比限制。确保调整面积和长宽比的阈值以适应你的特定应用场景。

标签:approx,矩形,image,cv2,contour,轮廓,open,CV
From: https://blog.csdn.net/m0_74154665/article/details/137470276

相关文章

  • OpenStack离线安装系列0:制作yum源
    OpenStack离线安装系列0:制作yum源如果采用离线源代码安装,则通常需要配置本地pip源;如果采用离线软件安装包的形式安装,则通常需要配置本地yum源。环境说明系统:Centos7版本:CentOS-7-x86_64-Minimal-1908ISO下载链接:http://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-......
  • OpenCV4.9处理平滑图像
    返回:OpenCV系列文章目录(持续更新中......)上一篇:使用OpenCV4.9的随机生成器和文本下一篇:OpenCV系列文章目录(持续更新中......)目标在本教程中,您将学习如何使用OpenCV函数将不同的线性滤波器应用于平滑图像,例如:blur()GaussianBlur()medianBlur()bilateralFilter()相关理......
  • CentOS 安装OpenJDK 11
    安装OpenJDK11sudoyuminstalljava-11-openjdk-devel   2.确认Java版本java-version   3.配置JAVA_HOME环境变量update-alternatives--configjava在输出的结果中,你会看到Java的安装路径,然后配置环境变量,如下:sudovi/etc/profile在文件的末尾,添加以......
  • opencv4.9.0交叉编译教程
    opencv4.9.0交叉编译教程1.准备工作在linux系统中下载opencv源码;在linux系统中安装cmake-gui;linux系统具有嵌入式板卡对应的交叉编译工具链,且能够正常使用。2.配置opencv​​​​​​​​勾选opencl(如果你芯片支持),opengl(如果你芯片支持),openmp。​​​​使能zLI......
  • class path resource [applicationContext.xml] cannot be opened because it does no
    测试运行报错:无法打开applicationContext.xml解决方法:打开File->ProjectStructure...找到Moudles->path->OutPutPath中写入resources路径......
  • 11.java openCV4.x 入门- Imgcodecs之图像读写
    专栏简介......
  • PHP imap 远程命令执行漏洞(CVE-2018-19518)漏洞复现
    phpimap扩展用于在PHP中执行邮件收发操作。其imap_open函数会调用rsh来连接远程shell,而debian/ubuntu中默认使用ssh来代替rsh的功能(也就是说,在debian系列系统中,执行rsh命令实际执行的是ssh命令)。因为ssh命令中可以通过设置-oProxyCommand=来调用第三方命令,攻击者通过注入注入这......
  • 移植helloworld驱动模块到openwrt系统
    一、OpenWRT中的驱动  Openwrt源码中,所有扩展的软件包都在package目录下,自己添加的应用放在该目录下。  所有扩展的内核驱动都在package/kernel目录下,自己添加的驱动放在该目录下。二、添加驱动步骤在package/kernel目录下添加一个helloworld文件夹在helloworld添加一个Make......
  • go | 上传文件分析 | http协议分析 | 使用openssl 实现 https 协议 server.key、serve
    是这样的,现在分析抓包数据test.gopackagemainimport( "fmt" "log" "github.com/gin-gonic/gin")funcmain(){ r:=gin.Default() //Uploadsinglefile r.MaxMultipartMemory=8<<20 r.POST("/upload",func(......
  • OpenHarmony 4.1 Release版本正式发布,邀您体验
    春风轻拂的4月,OpenAtomOpenHarmony(以下简称“OpenHarmony”)4.1Release版本如期而至,开发套件同步升级到API11Release。相比4.0Release版本,4.1Release版本应用开发的开放能力以全新的Kit维度呈现,提供给开发者更清晰的逻辑和场景化视角;新增4000多个API,应用开发能力更加丰富;Ark......