简单几何图形的识别与标记(opencv)

2023-11-02

一.实现目标

手绘简单几何图形,拍照后处理可识别并标记图形相应关键点。

  1. 直线:识别并标记始末点
  2. 三角形:识别并标记三个角点
  3. 矩形:识别并标记四个角点

二.实现流程

通过Python与OpenCV进行编程,采用了获取图形角点数量的方式来识别图形,两个点为直线,三个点为三角形,四个点为矩形。

对于形状的识别与点的标记,编写了ShapeDetection函数进行处理,通过OpenCV的相关函数,首先使用cv2.findContours寻找图形轮廓点,接着通过cv2.approxPolyDP函数获取轮廓角点坐标,并对其数目进行统计,以此来判断图形形状,若识别为直线、三角形或矩形,则在获取的角点坐标位置上用蓝色圆点进行标记,完成对不同图形相应点的标记。

具体过程为:先使用 cv2.cvtColor函数将需要识别的图片转为灰度图,再使用cv2.GaussianBlur函数对其进行高斯模糊处理,接着使用cv2.Canny函数进行边缘检测,最后将输出的图片传入ShapeDetection函数进行识别与标记。

三.代码实现

import cv2
import numpy as np
import imutils
#定义形状检测函数
def ShapeDetection(img):
    contours,hierarchy = cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)  #寻找轮廓点
    for obj in contours:
        area = cv2.contourArea(obj)  #计算轮廓内区域的面积
        perimeter = cv2.arcLength(obj,True)  #计算轮廓周长
        approx = cv2.approxPolyDP(obj,0.02*perimeter,True)  #获取轮廓角点坐标
        # print(approx) 测试,打印角点坐标
        CornerNum = len(approx)   #轮廓角点的数量
        x, y, w, h = cv2.boundingRect(approx)  #获取坐标值和宽度、高度
        #print(x,y,w,h) 测试,打印坐标值 宽度 高度

        #轮廓对象分类 按识别出的轮廓角点坐标数量来分类
        if CornerNum ==3: 
            objType ="triangle"
            cv2.drawContours(imgContour, approx, -1, (255, 255, 0), 8)
        elif CornerNum ==2: 
             objType ="line"
             cv2.drawContours(imgContour, approx, -1, (255, 255, 0), 8)
        elif CornerNum == 4:
            if w==h: 
                objType= "Square"
                cv2.drawContours(imgContour, approx, -1, (255, 255, 0), 8)
            else:
                objType="Rectangle"
                cv2.drawContours(imgContour, approx, -1, (255, 255, 0), 8)
        else:objType="N"
        #绘制边界框
        cv2.rectangle(imgContour,(x-10,y-10),(x+w+12,y+h+12),(0,0,255))  
        #绘制文字
      cv2.putText(imgContour,objType,(x+(w//2),y+(h//2)),cv2.FONT_HERSHEY_COMPLEX,0.6,(0,0,0),1)  
        
        
path = 'jihe/tupian/line.jpg'
img = cv2.imread(path)
imgContour = img.copy()

imgGray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)  #转灰度图
imgBlur = cv2.GaussianBlur(imgGray,(5,5),1)  #高斯模糊
imgCanny = cv2.Canny(imgBlur,60,60)  #Canny算子边缘检测
ShapeDetection(imgCanny)  #形状检测

cv2.imshow("Original img", img)
cv2.imshow("imgGray", imgGray)
cv2.imshow("imgBlur", imgBlur)
cv2.imshow("imgCanny", imgCanny)
cv2.imshow("shape Detection", imgContour)

cv2.waitKey(0)

四.运行及结果

1.直线

绘制图形如下:

识别标记结果如下:

 2.三角形

绘制图形如下:

识别标记结果如下:

3.矩形 

绘制图形如下:

识别标记结果如下:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单几何图形的识别与标记(opencv) 的相关文章

随机推荐

  • 1. 数学导论 - 概述

    文章目录 为什么需要数学 人类如何表示数字 计算机可以做什么 因为部分自媒体上无法显示公式 为了方便 有的地方我是直接整段截图 和文章字体不一致的部分还望见谅 Hi 大家好 又见面了 我是茶桁 这次我依然给大家带来的是基础部分 让我们进入
  • HTTP代理IP使爬虫轻松面对反爬虫

    在数据信息变的越发重要的时候 咱们可以从许多场所去取得数据源 不过要控制好数据抓取的方式 今天介绍一下数据抓取怎么样可以避免出现IP封停问题 先说一下爬虫的分类 爬虫一般分为三类 1 传统爬虫 从一个或若干初始网页的URL开始 取得初始网页
  • EBS销售订单挑库发放处理程序

    在EBS实施中 经常遇到从外部传进来一个被登记的销售订单 需要通过程序进行销售订单的挑库发放 下面是对SO挑库发放的实现步骤的详细实现 1 对销售订单的有效性验证 1 检查销售订单的行是否被完全传回客户化表 2 验证销售订单的关键字段 3
  • CTF之web安全

    web安全 CSRF 简介 CSRF 全名 Cross Site Request Forgery 跨站请求伪造 很容易将它与 XSS 混淆 对于 CSRF 其两个关键点是跨站点的请求与请求的伪造 由于目标站无 token 或 referer
  • 灰度斜坡intensity ramp和灰度台阶intensity step的区别

    在数字图像处理中 锐化处理关注的是灰度变化 discontinuities 的过渡部分 包括灰度台阶和灰度斜坡两种情况的突变 step and ramp discontinuities 那么这二者有什么区别呢 老猿理解 灰度斜坡 inten
  • 终于还是对闲鱼下手了。闲鱼爬虫,idlefish spider来了

    闲鱼目前最大的问题在于没有html请求口子了 闲鱼用了自家的app口子 而且还有spdy协议 拒绝使用代理 如果想采集闲鱼数据 并保存下来 做个对比分析之类的 传统的非传统的招数都已经凉了 怎么说呢 面对闲鱼 你想抓个包都不好抓了 所以 这
  • Win11注册表编辑器误删了如何恢复?

    注册表编辑器是一个用来更改系统注册表设置的高级工具 与资源管理器的界面很类似 近期有用户将注册表编辑器误删了 那么应该如何恢复呢 下面小编就给大家分享一下详细的恢复方法 遇到同样问题的用户注意了 更多重装系统教程尽在小白系统重装官网 1 首
  • 「量化」快乐:UC Berkeley 利用 AI 追踪多巴胺释放量及释放脑区

    内容一览 多巴胺是神经系统中重要的神经递质 与运动 记忆和奖赏系统息息相关 它是快乐的信使 当我们看到令人愉悦的东西时 体内就会分泌多巴胺 诱导我们向它追寻 然而 多巴胺的准确定量分析目前仍难以实现 借助机器学习 美国加利福尼亚大学伯克利分
  • mw325r 服务器无响应),水星(MERCURY)MW325R路由器连不上网怎么办?

    路由器换ip小助手 路由器换ip工具 是一款切换ip软件 专门适用于使用路由器上网的用户 有时候由于ip限制 需要更换上网ip地址 由于使用路由器上网 没有像拨号上网那样方便重新拨号就能换ip 每次需要重启路由器才可以 那这款专门给路由器用
  • SpringBoot+Mybatis多数据源配置

    SpringBoot Mybatis多数据源配置 Step1 在application properties配置两个数据源 数据源1 spring datasource one url jdbc mysql localhost 3306 s
  • Qt6 ffmpeg 音频和视频(非同步)推流到nginx-rtmp

    main cpp include
  • 集成学习5-Xgboost原理与调参

    github地址 DataScicence欢迎star 集成学习4 前向分步算法与GBDT 原理与案例 集成学习3 Boosting的原理和案例 集成学习2 bagging的原理与案例分析 集成学习1 投票法的原理和案例分析 Xgboost
  • CTF REVERSE练习之病毒分析

    首先介绍两个知识点 在后面的实验中运用到的 1 7Zip 7 Zip 是一款开源软件 我们可以在任何一台计算机上使用 7 Zip 包括用在商业用途的计算机 7 Zip 适用于 Windows 7 Vista XP 2008 2003 200
  • AS ERROR: x86 emulation currently requires hardware acceleration!报错解决傻瓜教程~

    最近学习android开发 一直用的是真机测试 从来没想过还要用到又慢又占内存的虚拟机 不过最近学到的一个章节要用到平板测试 没有平板的话就只能用AS创建虚拟机了 如何创建虚拟机的方法我在这里就不赘述了 这里主要介绍用AS运行虚拟机时遇到的
  • 解决Kali的Firefox浏览器不能正常使用

    原因 kali网卡没有分配IP 解决办法
  • (技术点)谈谈那些I/O方式----BIO、NIO、AIO

    一 事件分离器 要使用IO 就要说到事件分离器 在IO读写时 将IO请求与读写操作分离调配进行 需要用到事件分离器 事件分离器对象可以将来自事件源的IO时间分离出来 并分发到对应的read write时间处理器 Event Handler
  • React——组件的组合与交互

    组件的组合与交互 组合组件的构建 组合多个上述定义的 Box 组件 形成 Boxes 组件 并完成 属性 值的传递 lt 注 多个相同子组件时 每个子组件需要有唯一 key 值 gt 建立 Boxes 类组件 内含多个 Box组件 impo
  • post sql 数据库启动失败原因-记录

    打开服务 查看进程 若还有存活进程 杀掉相关post gres 相关的 重启服务 ok
  • windows软件或程序服务开机自启动的四种方式

    目录 方式一 1 脚本类型1 放入原脚本的快捷方式 脚本类型的 2 脚本类型2 自己写脚本 指向原服务路径 服务或软件类型的 方式二 添加任务计划方式 1 打开计算机管理 2 创建任务 添加任务名称和描述 根据需要随便填写 3 新建触发任务
  • 简单几何图形的识别与标记(opencv)

    一 实现目标 手绘简单几何图形 拍照后处理可识别并标记图形相应关键点 直线 识别并标记始末点 三角形 识别并标记三个角点 矩形 识别并标记四个角点 二 实现流程 通过Python与OpenCV进行编程 采用了获取图形角点数量的方式来识别图形