【opencv-python】寻找矩形框
实现思路:
- 将图片转换成HSV颜色空间,筛选出蓝色,得到二值图(见图1)
- 根据轮廓绘制小矩形(见图2)
- 选择合适的小矩形绘制最终的矩形框(见图3)
代码:
import cv2
import numpy as np
image_path = r"E:\blue.jpg" # 图片路径
img = cv2.imread(image_path)
#转化成HSV颜色空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
#筛选蓝色,得到二值图
mask = cv2.inRange(hsv, (100,43,46), (124,255,255))
#绘制框的图像
imgResult = cv2.copyTo(img,mask)
img_be = cv2.copyTo(img,mask)
#设置核
kernel = np.ones((6,6),np.uint8)
#开运算
# op = cv2.MORPH_OPEN 进行开运算,指的是先进行腐蚀操作,再进行膨胀操作
# op = cv2.MORPH_CLOSE 进行闭运算, 指的是先进行膨胀操作,再进行腐蚀操作
# 开运算:表示的是先进行腐蚀,再进行膨胀操作
# 闭运算:表示先进行膨胀操作,再进行腐蚀操作
opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
#寻找轮廓
contours, hierarchy = cv2.findContours(opening,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
#矩形列表
box_ji=[]
#根据轮廓绘制矩形
for i in range(len(contours)): area = cv2.contourArea(contours[i]) x, y, w, h = cv2.boundingRect(contours[i]) cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) rect = cv2.minAreaRect(contours[i]) #提取矩形坐标 box = cv2.boxPoints(rect) box = np.int0(box) angle =abs(abs(rect[2])-45) length = max(rect[1]) width = min(rect[1]) cv2.drawContours(img, [box], 0, (0, 255, 0), 2) box_ji.append(box)
#收集长度,根据长度进行匹配合适连接在一起的两个矩形
length_ji=[]
for b in box_ji: length_ji.append(b[2][1]-b[1][1])
#如果长度差在0.3之间,则匹配成功
ans_ji=[]
for l in range(len(length_ji)-1): for j in range(l+1,len(length_ji)): if -0.3<=length_ji[l]-length_ji[j]<=0.3: ans_ji.append((l,j))
#选择作为框的4个点,选择的顺序和矩形的边的位置和矩形的x,y坐标有关,为的是框选出最大的区域
kuan=[]
for a in ans_ji: if box_ji[a[0]][0][0]<box_ji[a[1]][2][0]: kuan.append([list(box_ji[a[0]][0]),list(box_ji[a[0]][3]),list(box_ji[a[1]][2]),list(box_ji[a[1]][1])]) else: kuan.append([list(box_ji[a[0]][1]), list(box_ji[a[0]][2]), list(box_ji[a[1]][3]), list(box_ji[a[1]][0])])
#绘制矩形
for k in kuan: kuang_=cv2.rectangle(imgResult, k[1], k[3], (0, 0, 255), thickness=1, lineType=4) cv2.imshow("begin", img_be)
cv2.imshow("Mask", mask)
cv2.imshow("kuang", img)
cv2.imshow("final",kuang_)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果:
图表 1
图表 2
图表 3
【opencv-python】寻找矩形框相关推荐
- opencv c++ 寻找矩形框_基于Python的OpenCV人脸检测!OpenCV太强了!
一.文章概述 本文将要讲述的是Python环境下如何用OpenCV检测人脸,本文的主要内容分为: 1.检测图片中的人脸 2.实时检测视频中出现的人脸 3.用运设备的摄像头实时检测人脸 二:准备工作 提 ...
- python图层合并_图层最新:Python叠加矩形框图层2种方法及效果_爱安网 LoveAn.com
关于"图层"的最新内容 聚合阅读 这篇文章主要介绍了Python叠加矩形框图层2种方法及效果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友 ...
- opencv方框内图像保存_opencv利用矩形框选中某一区域并保存为新图片
本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 一.基本原理 Mat img= imread(image): Rect rect(50,20, 200, 50); ...
- python演示验证图像叠加过程_Python叠加矩形框图层2种方法及效果代码实例
本篇文章小编给大家分享一下Python叠加矩形框图层2种方法及效果代码实例,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 两种方式以及效果: 方式一,使用 ...
- 基础学习笔记之opencv(5):实现鼠标选定矩形框
opencv编写程序中,用鼠标选定矩形框经常用到.编程时看似很简单的逻辑思路,如果对opencv中的Rect不是很了解的话,那实现的效果就不是特别理想,比如说虽然我们习惯性用鼠标从左上到右下选择,但是 ...
- python图层_Python叠加矩形框图层2种方法及效果
两种方式以及效果: 方式一,使用PIL.Image.blend方式: from PIL import Image, ImageDraw im = Image.open('d:/tmp/58.249.0 ...
- opencv(Python/c++):画矩形框(普通的与旋转的矩形框)
后续参考: 利用OpenCV提取图像中的矩形区域(PPT屏幕等):后续凸包什么的可以参考这个. https://segmentfault.com/a/1190000013925648 我们常常需要用矩 ...
- python opencv最小外接矩形_Opencv绘制最小外接矩形、最小外接圆
Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle. minAreaRect方法原型: RotatedRect minAre ...
- opencv 选择矩形框
新版opencv c++和python都不支持选多个roi,可以连续选几次. 参数解读: selectROI(windowName, img, showCrosshair=None, fromCent ...
- vs矩形框边框线显示被选中的区域;_如何使用OpenCV可视化的截取感兴趣区域
OpenCV是一个著名的计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python ...
最新文章
- Spring MVC 基于AnnotationFormatterFactory接口实现自定义的规则
- NOIP信息奥赛--1995“同创杯”初中复赛题题解(二)
- Google 为什么把几十亿行代码放在一个库
- 交付铁三角的故事之兵戎相见
- 10 - java 权限修饰符
- cmake mysql 参数_MySQL cmake编译时这些参数是什么意思?-问答-阿里云开发者社区-阿里云...
- Julia: 通过简单实践理解机器学习概念(flux.jl)
- SQL Server中默认的数据库及作用
- 【英语阅读】纽约时报 | 感染新冠病毒是怎样的感受
- java闰年_java 判断闰年
- 计算机写字板英语,写字板的英文是什么
- Chrome手势插件
- 必备工具!程序员高效率工作工具推荐
- MFC应用程序“生死因果”内幕
- android按键模拟测试
- 微信小程序 — 保存文件到本地
- GP232RL:国产USB转串口/UART芯片替代FT232RL
- [Linux] emacs简介
- android倒计时dialog,Dialog中显示倒计时,到时自动关闭
- Canvas | 绘制矩形、实心空心圆、三角形、线条