当前位置: 首页 > article >正文

2-2(补充) opencv实战进阶系列 最大多边形识别

 

1、前言

 

书接上回,代码能够很好的把图像中的矩形都找出来,若我们只需要找到图像中最大的矩形,需要对上节的代码进行一些修改。

 运行效果如下:

9e55738fe2d744de8afb6d669d3ea5e2.png

 

 

 

2、修改思路

 

在for遍历每个轮廓时,增加一个对轮廓面积的计算

area = cv2.contourArea(cnt)

然后将面积进行对比选出最大的轮廓:max_rect

# 初始化变量来存储最大矩形的信息
max_area = 0
max_rect = None

for cnt in contours:
    approx = cv2.approxPolyDP(cnt, 0.01 * cv2.arcLength(cnt, True), True)
    if len(approx) == 4:
        # 计算轮廓的面积
        area = cv2.contourArea(cnt)
        if area > max_area:
            max_area = area
            max_rect = cnt

之后同上节内容一样,把轮廓以及相关文字显示出来

 

完整代码:

import cv2

# 读取输入图像
img = cv2.imread('test4.png')

# 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 应用二值化将灰度图像转换为二进制图像
mask_gray = cv2.inRange(gray, 0, 251)

# 找到轮廓
contours, hierarchy = cv2.findContours(mask_gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
print("检测到的轮廓数量:", len(contours))

# 初始化变量来存储最大矩形的信息
max_area = 0
max_rect = None

for cnt in contours:
    approx = cv2.approxPolyDP(cnt, 0.01 * cv2.arcLength(cnt, True), True)
    if len(approx) == 4:
        # 计算轮廓的面积
        area = cv2.contourArea(cnt)
        if area > max_area:
            max_area = area
            max_rect = cnt

# 绘制最大的矩形
if max_rect is not None:
    img = cv2.drawContours(img, [max_rect], -1, (0, 170, 255), 3)

    # 计算矩形质心
    M = cv2.moments(max_rect)
    if M['m00'] != 0.0:
        x = int(M['m10'] / M['m00'])
        y = int(M['m01'] / M['m00'])
    cv2.putText(img, 'Largest Rectangle', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 0), 2)

cv2.imshow("mask_gray", mask_gray)
cv2.imshow("Shapes", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

 

 

 

 

 


http://www.kler.cn/news/361557.html

相关文章:

  • 人工智能:开启未来生活与工作的新征程
  • 出血性脑卒中临床智能诊疗建模
  • 使用JMeter录制元件来录制HTTPS下的脚本
  • Spark的安装配置及集群搭建
  • 10款超好用的文档加密软件|2024企业常用文档加密软件排行榜!
  • 线上问题排查-常见的线上问题
  • 「JVS更新日志」低代码、智能BI、逻辑引擎10.23功能更新说明
  • linux 离线安装redis
  • MySQL datetime不同长度的影响
  • ElasticSearch的向量存储和搜索
  • Android 系统SELinux
  • Leetcode—91. 解码方法【中等】
  • 华为配置 之 Console线路配置
  • PCB生产制造商强达电路,公布网上申购情况及中签率
  • 威胁狩猎:基于ELK的日志监控
  • 【最新华为OD机试E卷-支持在线评测】生成哈夫曼树(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)
  • 要卸载 RVM(Ruby Version Manager)和它管理的所有 Ruby 版本
  • 深度学习——循环神经网络RNN知识点小结(全)
  • Django学习-模板层_过滤器和继承
  • 【数据安全】企业数据安全防护体系
  • 十种排序方法
  • 【SpringCloud】Gateway微服务网关(gateway快速⼊⻔ 断⾔⼯⼚ 过滤器⼯⼚ 浏览器同源策略)
  • mysql-Innodb锁相关内容
  • Django(2)
  • 15分钟学Go 第6天:变量与常量
  • 《Python游戏编程入门》注-第3章1