OpenCV:绘制图像中mask的最小外接矩形

这篇具有很好参考价值的文章主要介绍了OpenCV:绘制图像中mask的最小外接矩形。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在计算机视觉和图像处理中,我们经常需要计算直线与外接矩形边的交点。这在进行边缘检测、图像分割、目标跟踪等任务时非常有用。本文将介绍如何使用OpenCV和NumPy计算直线与外接矩形边的交点,并展示如何在实际图像中绘制直线。

1.使用OpenCV读取图像

import cv2
import numpy as np

# 读取二值图像
img = cv2.imread('./111.png', cv2.IMREAD_GRAYSCALE)

2.寻找图像中的轮廓

使用OpenCV的findContours函数寻找图像中的轮廓。这里我们选择RETR_EXTERNAL表示只检测最外层轮廓,CHAIN_APPROX_SIMPLE表示压缩水平、垂直和对角线方向的元素,只保留它们的终点坐标。

# 寻找轮廓
contours, _ = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

3.获取最大轮廓

找到所有轮廓后,我们选择面积最大的轮廓,即目标物体所在的区域。

# 获取最大轮廓(白色区域)
max_contour = max(contours, key=cv2.contourArea)

4.计算最小外接矩形

使用minAreaRect函数计算最小外接矩形的信息,包括中心点、尺寸和旋转角度。

# 计算最小外接矩形
rect = cv2.minAreaRect(max_contour)
box = cv2.boxPoints(rect)
box = np.intp(box)

5.在原图上绘制最小外接矩形

使用minAreaRect函数计算最小外接矩形的信息,包括中心点、尺寸和旋转角度。

# 在原图上绘制最小外接矩形
result_img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
cv2.drawContours(result_img, [box], 0, (0, 255, 0), 2)

完整demo如下

import cv2
import numpy as np

# 读取二值图像
img = cv2.imread('./111.png', cv2.IMREAD_GRAYSCALE)

# 寻找轮廓
contours, _ = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 获取最大轮廓(白色区域)
max_contour = max(contours, key=cv2.contourArea)

# 计算最小外接矩形
rect = cv2.minAreaRect(max_contour)
box = cv2.boxPoints(rect)
box = np.intp(box)

# 在原图上绘制最小外接矩形
result_img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
cv2.drawContours(result_img, [box], 0, (0, 255, 0), 2)
cv2.imshow('result', result_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 计算外接矩形的 y 方向上的长度
center, size, angle = rect
width, height = size

# 计算直线与外接框的上边和下边的交点
x_pos = int(center[0])
y_pos_top = int(center[1] - height / 2)
y_pos_bottom = int(center[1] + height / 2)

# 计算直线的两个端点与外接矩形的边相交
line_top = ((x_pos, y_pos_top), (x_pos, y_pos_top + height))
line_bottom = ((x_pos, y_pos_bottom), (x_pos, y_pos_bottom - height))

# 计算直线与外接矩形边的交点
intersection_top = (x_pos, max(y_pos_top, min(y_pos_bottom, box[2][1])))
intersection_bottom = (x_pos, max(y_pos_top, min(y_pos_bottom, box[1][1])))

# 如果直线直接与外接矩形相交,交点就是直线的起点或者结束点
start_point = intersection_top if intersection_top in line_top else line_top[0]
end_point = intersection_bottom if intersection_bottom in line_bottom else line_bottom[0]

# 绘制直线
cv2.line(result_img, start_point, end_point, (0, 0, 255), 2)

# 显示图像
cv2.imshow('result', result_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

本文详细介绍了使用OpenCV进行图像处理的一系列步骤,包括读取图像、寻找轮廓、计算最小外接矩形和绘制相交直线。文章来源地址https://www.toymoban.com/news/detail-821618.html

到了这里,关于OpenCV:绘制图像中mask的最小外接矩形的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合

    目录 1.轮廓外接最大矩形boundingRect() 2.轮廓外接最小矩形minAreaRect() 3.轮廓外接多边形approxPolyDP() 1.轮廓外接最大矩形boundingRect() Rect cv::boundingRect ( InputArray array ) array:输入的灰度图像或者2D点集,数据类型为vectorPoint或者Mat。 示例代码:  轮廓外接最大矩形的结果: 2.轮廓外接

    2024年02月09日
    浏览(28)
  • 【Python】【OpenCV】绘制外接矩形、外接圆 以及 凸轮廓和Douglas-Peucker算法

     外接矩形、外接圆:   1、cv2.boundingRect() Method 和 cv2.minAreaRect() Merhod:前者只寻找和 x、y轴 平行的矩形,后者则可以出现旋转角度。 2、cv2.drawContours() Method:第二个参数接收的是轮廓信息,但是这个轮廓信息需要以 tuple or list or set类型(或者说是iterable)才可以传入。 请注

    2024年02月05日
    浏览(35)
  • 【opencv】示例-minarea.cpp 如何寻找一组随机生成的点的最小外接矩形、三角形和圆...

    此段代码的主要功能是:利用OpenCV库生成随机点集,并计算并展示这些点的最小外包矩形、三角形和圆形。用户可以通过按键重新生成不同的随机点集,或者按ESC/Q退出程序。程序中利用了OpenCV的随机数生成函数、绘图函数以及几何形状的计算函数。

    2024年04月14日
    浏览(40)
  • OpenCV(十三):图像中绘制直线、圆形、椭圆形、矩形、多边形和文字

    目录 1.绘制直线line() 2.绘制圆形circle() 3.绘制椭圆形ellipse()  4.绘制矩形rectangle() 5.绘制多边形 fillPoly()  6.绘制文字putText() 7.例子 1.绘制直线line() img:绘制圆形的图像 ptl:直线起始点在图像中的坐标 pt2: 直线终点在图像中的坐标 color:圆形的颜色,用三通道表示 thickness:轮廓的宽

    2024年02月09日
    浏览(41)
  • OPENCV C++(七)霍夫线检测+找出轮廓和外接矩形+改进旋转

    霍夫线检测  定义存放输出线的向量 此向量输出有距离,角度 因为检测的原理就是在变换霍夫空间里面去检测的,这里可以理解为极坐标 第3个参数是距离精度 第四个参数是角度精度,第五个是阈值,只有点超过90个才算一条线 在图中画线操作: 这里是画线操作  概率霍夫

    2024年02月13日
    浏览(31)
  • opencv 之 外接多边形(矩形、圆、三角形、椭圆、多边形)使用详解

    本文主要讲述opencv中的外接多边形的使用: 多边形近似 外接矩形、最小外接矩形 最小外接圆 外接三角形 椭圆拟合 凸包 将重点讲述最小外接矩形的使用 给一个opencv官方的例程: 过程图像如下: 椭圆拟合一般用于轮廓提取之后: 凸包绘制 计算两个旋转矩形交集: C++版的最

    2024年02月09日
    浏览(50)
  • OpenCV绘制矩形

    这是完整的代码:

    2024年02月09日
    浏览(28)
  • 【OpenCV常用函数:轮廓检测+外接矩形检测】cv2.findContours()+cv2.boundingRect()

    对具有黑色背景的二值图像寻找白色区域的轮廓,因此一般都会先经过cvtColor()灰度化和threshold()二值化后的图像作为输入。 例如,如下的轮廓检测出的结果contours和hierarchy。 根据轮廓点检测对应轮廓的外接矩形

    2024年02月13日
    浏览(34)
  • 使用openCV python绘制实心旋转的矩形

    ​ 看方法直接看最下边 看方法直接看最下边 看方法直接看最下边 一、通过中心点、宽高、角度得到四个顶点的公式网上都有,最后输出四个顶点的x和y坐标。 二、绘制实心矩形 关于怎么绘制实心矩形,因为openCV本身的cv2.rectangle只能绘制角度为0的矩形,没办法用,所以一开

    2024年02月09日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包