opencv: 绘制矩形轮廓框,并记录轮廓框坐标_JNingWei的博客-程序员宝宝_opencv获得矩形轮廓

技术标签: OpenCV-Python  opencv  

步骤简述

使用OpenCV绘制矩形轮廓框,一般包括如下步骤:

  1. 转换为灰度图;
  2. 进行阈值处理;
  3. 进行中值滤波;
  4. 在原始图像上绘制矩形框。

附图解析

原始图像:
这里写图片描述

第一步,转换为灰度图:
这里写图片描述

第二步,经过阈值处理:
这里写图片描述

第三步,中值滤波后:
这里写图片描述

最后一步,在原始图像上绘制矩形框:
这里写图片描述

生成的记录文件(矩形轮廓框四个端点的平面坐标)

1: [367,201  367,210  371,201  371,210]
2: [362,195  362,197  363,195  363,197]
3: [297,187  297,190  301,187  301,190]
4: [396,182  396,184  398,182  398,184]
5: [371,168  371,190  394,168  394,190]
6: [382,166  382,169  387,166  387,169]
7: [211,160  211,189  238,160  238,189]
8: [377,148  377,163  402,148  402,163]
9: [308,148  308,217  353,148  353,217]
10: [315,193  315,215  348,193  348,215]
11: [277,148  277,188  311,148  311,188]
12: [241,147  241,190  274,147  274,190]
13: [179,132  179,189  235,132  235,189]
14: [355,129  355,192  372,129  372,192]

Code

附上自己写的实验代码:

# coding=utf-8
import cv2

# 原图像路径
origin_pic = cv2.imread('./origin.jpg')
# 文档路径,用于记录轮廓框坐标
txt_file = open('./contours.txt', 'w')

# 要先转换成单通道灰度图像才能进行后续的图像处理
pic = cv2.cvtColor(origin_pic, cv2.COLOR_BGR2GRAY)
# 阈值处理,将前景全填充为白色,背景全填充为黑色
_, pic = cv2.threshold(src=pic, thresh=200, maxval=255, type=1)
# 中值滤波,去除椒盐噪声
pic = cv2.medianBlur(pic, 5)
# 边缘检测,得到的轮廓列表
_1, contours, _2 = cv2.findContours(pic, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 根据轮廓列表,循环在原始图像上绘制矩形边界
for i in range(len(contours)):
    cnt = contours[i]
    x, y, w, h = cv2.boundingRect(cnt)
    origin_pic = cv2.rectangle(origin_pic, (x, y), (x+w, y+h), (255, 0, 0), 2)
    txt_file.write('{}: [{},{}  {},{}  {},{}  {},{}]\n'.format(i+1, x, y, x, y+h, x+w, y, x+w, y+h))

cv2.imwrite('./rectangle.jpg', origin_pic)
txt_file.close()

cv2.imshow('', origin_pic)
cv2.waitKey(0)
cv2.destroyAllWindows()
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jningwei/article/details/78233010

智能推荐

Linux C 数据结构——队列_zqixiao_09的博客-程序员宝宝

还是先放这张图,以便对比和理解:    队列是限制在两端进行插入操作和删除操作的线性表,允许进行存入操作的一端称为“队尾”,允许进行删除操作的一端称为“队头”。当线性表中没有元素时,称为“空队”。特点:先进先出(FIFO)。

概率论基础 —— 5.离散型二维随机变量_打码的老程的博客-程序员宝宝_概率论里的投影是什么意思

在本系列前4章节,我们快速的过了一遍概率论对于一维随机变量的定义与分类。从最原始直观的经典概率类型出发,我们引申到了条件概率,以及针对条件概率,扩展得到的全概率、贝叶斯概率。在对概率建立起一定概念后,我们又引入了针对是否连续,而提出的连续型和离散型概率事件的模型,并且分别介绍了针对离散型概率事件表达的概率分布函数,与连续型的概率密度函数,并介绍了5种重要的概率模型。文章目录关于二维概率事件关于离散型二维随机变量分布律(Probability Function / Distribution Law).

最简单的echart 饼图实现_一彡十的博客-程序员宝宝_echart饼图

话不多说,先看效果图:实现步骤如下:1.在echart官网下载echart.min.js ,下载网址:https://echarts.baidu.com/download.html2.引入echart.min.js3.写前端代码,完整代码如下:<%@ page contentType="text/html;charset=UTF-8"%><h...

抓取网页中数据 -----51book中城市码_weixin_30901729的博客-程序员宝宝

================== 获取网页中span标签里面的t_id的值 public function getpreg(){ $www = 'http://monkey.test.tripb.cn/test/preg.html'; $html = file_get_contents($www); $search = '/<span([^>]*)\s*t_i...

CPU 与 GPU 之间数据转换 cudaMemcpy_xiaoheibaqi的博客-程序员宝宝

//显存上分配空间CUDA_SAFE_CALL(cudaMalloc((void**)&Dst_d,sizeof(float3) * totalPNum));//显存上传输数据CUDA_SAFE_CALL(cudaMemcpy(Dst_d, Srcdata0_h, sizeof(float3) * numdata0, cudaMemcpyHostToDevice));CUDA_SA

随便推点

[USACO5.4]Telecowmunication_weixin_33961829的博客-程序员宝宝

OJ题号:洛谷1345思路:求无向图最大流最小点割集。首先将每个点拆成两个,对于自己,连一条容量为$1$的边,对于原来的边,对$(x\prime,y)$$(y\prime,x)$分别连一条容量为$\infty$的边,这样我们就将最小点割转化成了最小边割,根据最大流最小割定理,直接跑最大流即可。如何求出字典序最小的集?一个点在最小点割集中当且仅当删去这个点时,最大流变小。因此我们可以从小到大...

【BZOJ 1178】【APIO 2009】CONVENTION会议中心_as2886089的博客-程序员宝宝

http://www.lydsy.com/JudgeOnline/problem.php?id=1178这道题想了好久没想明白,倍增数组通过看题解很快就明白了,但是一小段区间内应有的最多线段数一直不知道怎么记录。后来聪哥提醒我才明白,直接getans(l,r)不就完了吗_(:з」∠)_根本不用记录啊QwQ我用splay维护线段的位置顺序,查找前驱后继等等。上午因为懒得写插入线...

PageHelper实现_飞乐鸟的博客-程序员宝宝_pagehelper实现

添加依赖:<!-- pagehelper分页模块 --><dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.2</v

fastjson后某些字符有转义符_树上的疯子^的博客-程序员宝宝_fastjson 转义字符

尤其是特殊字段如果有转意义字符就有问题使用 StringEscapeUtils.unescapeJavaScript(jsDataStr) 解决!!!

mysql5.5 my.ini优化,mysql优化 my.ini高手设置_一瓶辣酱的博客-程序员宝宝

据说这是高手优化的mysql,供大家参考,其中连接数 max_connections=1500可以根据服务器的性能更改.pc136.com 版权所有#set-variable = connect_timeout=5#set-variable = wait_timeout=5 pc136.com 版权所有建议启用,负担重的服务器可以适当减少持续连接时间PC易上路[mysq...

linux7安装tools提示目录不在,关于Centos7安装vmtools时,存在kernalheaderd仍然找不到路径的问题..._weixin_39664585的博客-程序员宝宝

今天在安装vmtools出现的找不到kernel headers的问题,主要原因是版本不匹配!在第一次安装时,提示gcc路径找不到,安装gcc以后又出现kerneal headers路径找不到。但是检查/usr/src/kernel路径时发现kernel文件时存在的。于是运行:rpm -qa|grep kernelkernel-tools-libs-3.10.0-957.el7.x86_64ker...

推荐文章

热门文章

相关标签