语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆

news/2024/11/29 12:40:02/

文章目录

  • mask图像介绍
  • 步骤
  • 代码

mask图像介绍

根据 mask 图像来画分割对象的外接椭圆是一种常见的图像分割任务。Mask 图像通常是一个二值图像,其中包含了感兴趣对象的像素。通常情况下,白色像素表示对象,黑色像素表示背景。

步骤

以下是一般的步骤,演示如何根据 mask 图像来画分割对象的外接椭圆:

  • 加载 Mask 图像: 读取包含对象分割信息的 mask 图像。这个图像可以是单通道的灰度图像,其中对象区域是白色,或者是具有 alpha 通道的带有透明背景的图像。
  • 寻找对象轮廓: 使用 cv2.findContours() 函数查找 mask 图像中对象的轮廓。这些轮廓将帮助我们确定对象的形状。
  • 拟合外接椭圆: 对每个对象轮廓,使用 cv2.fitEllipse() 函数计算其外接椭圆。
  • 绘制外接椭圆: 使用 cv2.ellipse() 函数将计算得到的外接椭圆绘制在原始图像上,或者创建一个新的图像来显示结果。

代码

输入图片
在这里插入图片描述
代码

import cv2
import numpy as np# 读取图像
image = cv2.imread('7.png')
# print(image.shape)
# exit()
# 将图像转换为灰度
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用二值化处理图像
ret, binary_image = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)# 查找二值化图像中的轮廓
contours, _ = cv2.findContours(binary_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # CHAIN_APPROX_SIMPLE# 遍历轮廓并绘制外接圆
for contour in contours:if len(contour) >= 5:# 计算外接椭圆ellipse = cv2.fitEllipse(contour)# 绘制外接椭圆cv2.ellipse(image, ellipse, (0, 255, 0), 2)# 显示结果
cv2.imshow('Image with Circles', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出图片
在这里插入图片描述


http://www.ppmy.cn/news/1141012.html

相关文章

【Ubuntu】Systemctl 管理 MinIO 服务器的启动和停止

要使用 systemctl 来管理 MinIO 服务器的启动和停止,您需要创建一个 systemd 服务单元文件,以便 systemd 能够启动和停止 MinIO 服务器。下面是一般的步骤: 创建 systemd 服务单元文件: 打开终端并使用文本编辑器创建一个新的 sys…

面试算法20:回文子字符串的个数

题目 给定一个字符串,请问该字符串中有多少个回文连续子字符串?例如,字符串"abc"有3个回文子字符串,分别为"a"、“b"和"c”;而字符串"aaa"有6个回文子字符串,分别…

iTunes更新iOS17出现发生未知错误4000的原因和解决方案

有不少人使用iTunes更新iOS 17时出现「无法更新iPhone发生未知的错误4000」的错误提示,不仅不知道iTunes升级失败的原因,也无从解决iPhone无法更新4000的问题。 小编今天就分享iPhone更新iOS系统出现4000错误提示的原因和对应的解决方案。 为什么iPhone…

7346-2015 控制电机基本外形结构型式

声明 本文是学习GB-T 7346-2015 控制电机基本外形结构型式.pdf而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了控制电机的机座号、外形及安装尺寸、轴伸型式、出线方式、标记及铭牌。 本标准适用于各类控制电机(以下简称电机),其…

软件项目验收测试报告-软件项目验收流程

对甲方而言,项目验收是正式接受项目成果,将项目从建设转为运营。对于乙方来说,则意味着项目的结束,项目资源的释放。 项目验收是项目收尾的重要环节,依据招投标文件、合同对测评相关要求内容、项目章程和项目过程中的…

JDBC-day02(使用PreparedStatement实现CRUD操作)

所需的数据库数据要导入到自己的数据库库中 三:使用PreparedStatement实现CRUD操作 数据库连接被用于向数据库服务器发送命令和 SQL 语句,并接受数据库服务器返回的结果。其实一个数据库连接就是一个Socket连接。CRUD操作:根据返回值的有无…

C++算法:寻找两个正序数组的中位数

题目 寻找两个正序数组的中位数 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1: 输入:nums1 [1,3], nums2 [2] 输…

为什么说重写是运行时多态?

为什么说重写是运行时多态? 重写(Overriding)被称为运行时多态(Runtime Polymorphism),是因为它涉及到在程序运行时(而不是编译时)根据对象的实际类型来确定要调用的方法。在运行时&…