opencv-python中 boundingRect(cnt)以及cv2.rectangle用法「建议收藏」

转自http://blog.csdn.net/zhangxb35/article/details/47275277矩形边框(BoundingRectangle)是说,用一个最小的矩形,把找到的形状包起来。还有一个带旋转的矩形,面积会更小,效果见下图上代码首先介绍下cv2.boundingRect(img)这个函数这个函数很简单,img是一个二值图,也就是它的参数;

大家好,又见面了,我是你们的朋友全栈君。

转自  http://blog.csdn.net/zhangxb35/article/details/47275277

矩形边框(Bounding Rectangle)是说,用一个最小的矩形,把找到的形状包起来。还有一个带旋转的矩形,面积会更小,效果见下图

Bounding Rectangle

上代码

首先介绍下cv2.boundingRect(cnt)这个函数

这个函数很简单,cnt是一个轮廓点集合,也就是它的参数,可以通过cv2.findContours获取;

返回四个值,分别是x,y,w,h;

x,y是矩阵左上点的坐标,w,h是矩阵的宽和高

bgr_img = cv2.imread("./demo.jpeg")
gray_img = cv2.cvtColor(bgr_img, cv2.COLOR_BGR2GRAY)
th, binary = cv2.threshold(gray_img, 0, 255, cv2.THRESH_OTSU)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(bgr_img, contours, -1, (0, 0, 255), 3)

bounding_boxes = [cv2.boundingRect(cnt) for cnt in contours]

for bbox in bounding_boxes:
     [x , y, w, h] = bbox
     cv2.rectangle(bgr_img, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow("name", bgr_img)
cv2.waitKey(0)

然后利用cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)画出矩行

参数解释

第一个参数:img是原图

第二个参数:(x,y)是矩阵的左上点坐标

第三个参数:(x+w,y+h)是矩阵的右下点坐标

第四个参数:(0,255,0)是画线对应的rgb颜色

第五个参数:2是所画的线的宽度

# 用绿色(0, 255, 0)来画出最小的矩形框架
x, y, w, h = cv2.boundingRect(cnt)
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)

# 用红色表示有旋转角度的矩形框架
rect = cv2.minAreaRect(cnt)
box = cv2.cv.BoxPoints(rect)
box = np.int0(box)
cv2.drawContours(img, [box], 0, (0, 0, 255), 2)
cv2.imwrite('contours.png', img)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129531.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月14日 上午11:00
下一篇 2022年4月14日 上午11:20


相关推荐

  • 避免在移动端页面中使用100vh

    避免在移动端页面中使用100vh100vh带来的问题在CSS中,视口单位(Viewportunits)听起来不错。如果要设置一个元素的样式使它占据整个屏幕的高度,那么你可以设置height:100vh,这样你就拥有一个完美的全屏元素,该元素会随着视口的变化而调整大小!可惜的是,事实并非如此。100vh在移动浏览器中以一种微妙但基本的方式被破坏,使其几乎无用。最好避免使用100vh,而应该通过javascript设置高度的方…

    2022年5月1日
    47
  • 实内积空间和欧式空间的定义

    实内积空间和欧式空间的定义内积空间第 1 讲

    2026年3月26日
    3
  • 什么是备兑开仓_期权如何备兑开仓

    什么是备兑开仓_期权如何备兑开仓小知识备兑开仓是指投资者在持有足额标的证券的基础上,卖出相应数量的认购期权合约。备兑开仓属于“抛补式”期权,也就是说投资者在合约到期时按行权价卖出标的证券的义务可以通过持有的标的证券予以履行。当认

    2022年8月6日
    8
  • 本地AI总报错?这份OpenClaw保姆级部署与13000+技能排雷指南请收好!

    本地AI总报错?这份OpenClaw保姆级部署与13000+技能排雷指南请收好!

    2026年3月16日
    1
  • WebGame开发总结

    WebGame开发总结项目基本情况:  服务器端采用c++和c#混合开发,网络层采用c++开发,业务逻辑用c#开发。客户端采用silverlight。数据库采用mysql。GM工具用Asp.net,GM工具盒服务器通讯用wcf,基本把微软的东西都用遍了。  服务器端在开始的时候,使用了某位同事之前开发的一款服务器端引擎,改引擎曾经开源但现在基本不再更新。引擎地址:http://mmorpg.codeplex.com/  这款引擎在使用上只满足了部分需求,再加上原作者又跳槽,引擎基本是我在维护和改进,不过基本上都往里面

    2022年5月2日
    54
  • 斯坦福ML公开课笔记14——主成分分析

    斯坦福ML公开课笔记14——主成分分析

    2021年12月15日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号