实现思路:

  1. 将图片转换成HSV颜色空间,筛选出蓝色,得到二值图(见图1)
  2. 根据轮廓绘制小矩形(见图2)
  3. 选择合适的小矩形绘制最终的矩形框(见图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】寻找矩形框相关推荐

  1. opencv c++ 寻找矩形框_基于Python的OpenCV人脸检测!OpenCV太强了!

    一.文章概述 本文将要讲述的是Python环境下如何用OpenCV检测人脸,本文的主要内容分为: 1.检测图片中的人脸 2.实时检测视频中出现的人脸 3.用运设备的摄像头实时检测人脸 二:准备工作 提 ...

  2. python图层合并_图层最新:Python叠加矩形框图层2种方法及效果_爱安网 LoveAn.com

    关于"图层"的最新内容 聚合阅读 这篇文章主要介绍了Python叠加矩形框图层2种方法及效果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友 ...

  3. opencv方框内图像保存_opencv利用矩形框选中某一区域并保存为新图片

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 一.基本原理 Mat img= imread(image): Rect rect(50,20, 200, 50); ...

  4. python演示验证图像叠加过程_Python叠加矩形框图层2种方法及效果代码实例

    本篇文章小编给大家分享一下Python叠加矩形框图层2种方法及效果代码实例,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 两种方式以及效果: 方式一,使用 ...

  5. 基础学习笔记之opencv(5):实现鼠标选定矩形框

    opencv编写程序中,用鼠标选定矩形框经常用到.编程时看似很简单的逻辑思路,如果对opencv中的Rect不是很了解的话,那实现的效果就不是特别理想,比如说虽然我们习惯性用鼠标从左上到右下选择,但是 ...

  6. python图层_Python叠加矩形框图层2种方法及效果

    两种方式以及效果: 方式一,使用PIL.Image.blend方式: from PIL import Image, ImageDraw im = Image.open('d:/tmp/58.249.0 ...

  7. opencv(Python/c++):画矩形框(普通的与旋转的矩形框)

    后续参考: 利用OpenCV提取图像中的矩形区域(PPT屏幕等):后续凸包什么的可以参考这个. https://segmentfault.com/a/1190000013925648 我们常常需要用矩 ...

  8. python opencv最小外接矩形_Opencv绘制最小外接矩形、最小外接圆

    Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle. minAreaRect方法原型: RotatedRect minAre ...

  9. opencv 选择矩形框

    新版opencv c++和python都不支持选多个roi,可以连续选几次. 参数解读: selectROI(windowName, img, showCrosshair=None, fromCent ...

  10. vs矩形框边框线显示被选中的区域;_如何使用OpenCV可视化的截取感兴趣区域

    OpenCV是一个著名的计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python ...

最新文章

  1. Spring MVC 基于AnnotationFormatterFactory接口实现自定义的规则
  2. NOIP信息奥赛--1995“同创杯”初中复赛题题解(二)
  3. Google 为什么把几十亿行代码放在一个库
  4. 交付铁三角的故事之兵戎相见
  5. 10 - java 权限修饰符
  6. cmake mysql 参数_MySQL cmake编译时这些参数是什么意思?-问答-阿里云开发者社区-阿里云...
  7. Julia: 通过简单实践理解机器学习概念(flux.jl)
  8. SQL Server中默认的数据库及作用
  9. 【英语阅读】纽约时报 | 感染新冠病毒是怎样的感受
  10. java闰年_java 判断闰年
  11. 计算机写字板英语,写字板的英文是什么
  12. Chrome手势插件
  13. 必备工具!程序员高效率工作工具推荐
  14. MFC应用程序“生死因果”内幕
  15. android按键模拟测试
  16. 微信小程序 — 保存文件到本地
  17. GP232RL:国产USB转串口/UART芯片替代FT232RL
  18. [Linux] emacs简介
  19. android倒计时dialog,Dialog中显示倒计时,到时自动关闭
  20. Canvas | 绘制矩形、实心空心圆、三角形、线条

热门文章

  1. 数据库开发工程师岗位职责and技能要求
  2. 压缩文件解压密码破解之fcrackzip
  3. copy 收到_浔兴股份:关于收到福建证监局 对公司采取责令改正措施决定的公告...
  4. WPS如何按单元格背景颜色求和
  5. Android 打印之将文字转换成 Bitmap 图片,再转换成Bytes 数组 进行打印
  6. 【机器学习】ROC曲线以及AUC面积的原理(理论+图解)
  7. Mac上将多张图片转化为pdf文档并添加水印
  8. Qt显示wav波形图
  9. 新站快速排名的seo优化流程
  10. STATA进行回归分析时,自变量是分类变量,如何设置哑变量?