【千律】OpenCV基础:图像外接矩形、最小外接矩形、凸包、外接圆、拟合椭圆的绘制

2023-10-27

环境:Python3.8 和 OpenCV

内容:图像外接矩形、最小外接矩形、凸包、外接圆、拟合椭圆的绘制

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt


# 封装图片显示函数
def image_show(image):
    if image.ndim == 2:
        plt.imshow(image, cmap='gray')
    else:
        image = cv.cvtColor(image, cv.COLOR_BGR2RGB)
        plt.imshow(image)
    plt.show()


if __name__ == '__main__':

    # 读取原图
    img_desk = cv.imread('desk.png')

    # 转换为灰度图
    img_gray = cv.cvtColor(img_desk, cv.COLOR_RGB2GRAY)

    # 二值化
    [thresh, img_bin] = cv.threshold(img_gray, -1, 255, cv.THRESH_OTSU)

    # 获取轮廓
    [cnt, hir] = cv.findContours(img_bin, cv.RETR_CCOMP, cv.CHAIN_APPROX_NONE)

    # 绘制轮廓 (绘制第九个轮廓-矩形)
    cv.drawContours(img_desk, cnt, 8, (0, 0, 255), 1)

    # 获取外接矩形的坐标点
    cns = cnt[8]
    X, Y, W, H = cv.boundingRect(cns)

    # 绘制外接矩形
    img_rec = cv.rectangle(img_desk.copy(), (X, Y), (X + W, Y + H), (255, 255, 0), 3)

    # 显示图像
    image_show(img_rec)

    # 获取最小外接矩形
    min_rec = cv.boxPoints(cv.minAreaRect(cns)).astype(np.int32)

    # 绘制最小外接矩形
    img_min_rec = cv.drawContours(img_desk.copy(), [min_rec], 0, (255, 0, 255), 3)

    # 显示图像
    image_show(img_min_rec)

    # 获取凸包坐标
    hull = cv.convexHull(cns)

    # 绘制凸包图形
    img_hull = cv.drawContours(img_desk.copy(), [hull], 0, (0, 255, 255), 3)

    # 显示图像
    image_show(img_hull)

    # 获取最小外接圆
    (X, Y), R = cv.minEnclosingCircle(cns)

    # 绘制最小外接圆
    img_circle = cv.circle(img_desk.copy(), (int(X), int(Y)), int(R), (125, 255, 0), 3)

    # 显示图像
    image_show(img_circle)

    # 获取拟合椭圆坐标
    ellipse = cv.fitEllipse(cns)

    # 绘制拟合椭圆
    img_ellipse = cv.ellipse(img_desk.copy(), ellipse, (255, 125, 0), 3)

    # 显示图像
    image_show(img_ellipse)
    

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

【千律】OpenCV基础:图像外接矩形、最小外接矩形、凸包、外接圆、拟合椭圆的绘制 的相关文章

随机推荐

  • [jdbc]DAO及相关实现类

    DAO及相关实现类 DAO BaseDAO java CustomerDAO java CustomerDAOImpl java 测试CustomerDAOImplTest 升级版就是把Customer class 去掉 具体没写 再jdb
  • 数据库之表格(一): 建表-备份-恢复【SQL-Server】

    不求点赞 只求耐心看完 指出您的疑惑和写的不好的地方 谢谢您 本人会及时更正感谢 希望看完后能帮助您理解算法的本质 目录 一 操作一 建立表格 二 操作二 备份表格 三 操作三 恢复导入表格 一 操作一 建立表格 可以都设为 c h a r
  • 静态综合实验

    对未来的真正慷慨 是把一切都献给现在 阿尔贝 加缪 反抗者 静态综合实验 让我们来看看实验的样子 IP地址划分 R3下方电脑DHCP获取IP地址 路由表要尽量小 就要写缺省路由 缺省路由方向要相同 否则出现路由环路 但是缺省路由不能代表所有
  • 光纤通信技术

    目录 1 绪论 2 光纤和光缆 2 1 光纤 1 阶跃型光纤 2 渐变型光纤 3 波动光学分析 4 光纤的基本特性 2 2 光缆 3 光源和光发射机 3 1 光电器件的一般工作原理 3 2 发光二极管 LED 3 3 半导体激光器 LD 3
  • Java集合基础知识必会(一)

    Java集合基础知识 一 Java集合是Java中一种非常重要的数据结构 它提供了一种方便而高效的方式来存储和处理数据 本文将介绍Java集合的基础知识 包括集合框架的概述 常见的集合接口和实现类 以及一些使用案例 集合框架概述 Java集
  • OpenCV 变换整幅图像的warpPerspective()函数——中心化坐标表示

    OpenCV自带的warpPerspective 函数 可以根据透视变换参数实现从一幅图像到另外一幅图像之间的映射变换 OpenCV为了保证坐标的对应关系 在一些情况下 会对变换的图像进行裁剪 以至于不能显示图像全貌 如图1所示 这限制了其
  • A. 运维体系 --- SLA理论体系

    A 运维体系 SLA理论体系 概述 SLA 是服务供应商与客户之间的服务等级协议 它定义了服务供应商应保证的服务质量 以及在服务不达标情况下的服务赔偿 SLA在定义上又细分为SLI SLO与SLA SLI 服务质量指标 服务的某项质量的一个
  • Linux将一个文件夹或文件夹下的所有内容复制到另一个文件夹

    1 将一个文件夹下的所有内容复制到另一个文件夹下 cp r home packageA home cp packageB 或 cp r home packageA home cp packageB 这两种方法效果是一样的 方法示例 2 将一
  • 201809-3元素选择器

    题目链接 题目描述 样例输入 11 5 html head title body h1 p subtitle div main h2 p none div p two p subtitle h3 div p div div p 样例输出 3
  • 适用于Windows的Xcode:在PC上安装Xcode的5种方法

    适用于Windows的Xcode 在PC上安装Xcode的5种方法 您的目标是开发iOS应用程序但是您没有可以支持Apple操作系统的计算机吗 您不必担心 因为您可以在Windows计算机上运行Xcode Xcode是一个值得信赖的macO
  • JavaWeb----SSM框架简单的搭建和使用---2021-07-22

    一 先对SSM矿建做个简单的介绍 大概先了解这是做啥的有啥用 下面是详细到每一步的保姆级教程 SSM简介 SSM Spring SpringMVC MyBatis 框架集由Spring MyBatis两个开源框架整合而成 SpringMVC
  • 从0到1搭建个人博客-Django(三)

    你好 我是goldsunC 让我们一起进步吧 从0到1搭建个人博客 Django 三 在以下链接快速回顾系列文章内容 从0到1搭建个人博客 Django 一 从0到1搭建个人博客 Django 二 本篇内容主要是一些框架概念性的东西 需要理
  • 数组知识初阶

    思维导图 目录 思维导图 1 一维数组 1 1一维数组的创建 1 2一维数组的初始化 1 3一维数组的使用 1 4一维数组在内存中的存储 2 二维数组 2 1二维数组的创建与初始化 2 3二维数组的使用 2 4二维数组的存储 3 数组越界
  • 配置基于域名的虚拟主机

    1 安装好apache之后 修改http conf文件 去掉Include conf extra httpd vhosts conf前的 Require all denied 改成 Require all granted 2 打开conf
  • 计算机网络-应用层

    应用层 应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文 应用 Web 文件传输FTP 远程登录 电子邮件 域名 统一资源定位符URL 域名 由一串用 分隔的名字组成的Internet上某一台计算机或计算机组的名称 www
  • Unity TMP/Test 自适应文本

    Unity TMP Test 自适应文本 注意 Text组件 直接把脚本中所有的TextMeshProUGUI改为Text即可 TMP using System Collections using System Collections Ge
  • 对话OpenSea联创Alex:我们仍然只触及到NFT能力的冰山一角

    OpenSea是世界上最大的NFT交易市场 也是NFT行业爆发的最大赢家之一 但去年年底以来面临着被批不重视社区 中心化 竞争加剧等问题 近日 斯坦福大学加密团体Crypto Stanford对OpenSea的联合创始人兼前首席技术官 斯坦
  • C++构造函数的三种写法

    C 构造函数的三种写法 1 C 规定 对象的成员变量的初始化动作发生在进入构造函数本体之前 也就是说采用初始化列表的话 构造函数本体实际上不需要有任何操作 因此效率更高 关联 1 C 可以使用 小括号 大括号 直接赋值 并且 兼容了 C风格
  • C++ 将十进制数转换为二进制数方法

    本文介绍一种将十进制数转换为二进制数的方式 实现要点 1 用数组来存储每次对2取余的结果 2 两次使用for循环 分别进行转换和输出 3 取模运算 include
  • 【千律】OpenCV基础:图像外接矩形、最小外接矩形、凸包、外接圆、拟合椭圆的绘制

    环境 Python3 8 和 OpenCV 内容 图像外接矩形 最小外接矩形 凸包 外接圆 拟合椭圆的绘制 import cv2 as cv import numpy as np import matplotlib pyplot as pl