技术标签: OpenCV-Python opencv
使用OpenCV绘制矩形轮廓框,一般包括如下步骤:
原始图像:
第一步,转换为灰度图:
第二步,经过阈值处理:
第三步,中值滤波后:
最后一步,在原始图像上绘制矩形框:
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]
附上自己写的实验代码:
# 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()
还是先放这张图,以便对比和理解: 队列是限制在两端进行插入操作和删除操作的线性表,允许进行存入操作的一端称为“队尾”,允许进行删除操作的一端称为“队头”。当线性表中没有元素时,称为“空队”。特点:先进先出(FIFO)。
在本系列前4章节,我们快速的过了一遍概率论对于一维随机变量的定义与分类。从最原始直观的经典概率类型出发,我们引申到了条件概率,以及针对条件概率,扩展得到的全概率、贝叶斯概率。在对概率建立起一定概念后,我们又引入了针对是否连续,而提出的连续型和离散型概率事件的模型,并且分别介绍了针对离散型概率事件表达的概率分布函数,与连续型的概率密度函数,并介绍了5种重要的概率模型。文章目录关于二维概率事件关于离散型二维随机变量分布律(Probability Function / Distribution Law).
话不多说,先看效果图:实现步骤如下:1.在echart官网下载echart.min.js ,下载网址:https://echarts.baidu.com/download.html2.引入echart.min.js3.写前端代码,完整代码如下:<%@ page contentType="text/html;charset=UTF-8"%><h...
================== 获取网页中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...
//显存上分配空间CUDA_SAFE_CALL(cudaMalloc((void**)&Dst_d,sizeof(float3) * totalPNum));//显存上传输数据CUDA_SAFE_CALL(cudaMemcpy(Dst_d, Srcdata0_h, sizeof(float3) * numdata0, cudaMemcpyHostToDevice));CUDA_SA
OJ题号:洛谷1345思路:求无向图最大流最小点割集。首先将每个点拆成两个,对于自己,连一条容量为$1$的边,对于原来的边,对$(x\prime,y)$$(y\prime,x)$分别连一条容量为$\infty$的边,这样我们就将最小点割转化成了最小边割,根据最大流最小割定理,直接跑最大流即可。如何求出字典序最小的集?一个点在最小点割集中当且仅当删去这个点时,最大流变小。因此我们可以从小到大...
http://www.lydsy.com/JudgeOnline/problem.php?id=1178这道题想了好久没想明白,倍增数组通过看题解很快就明白了,但是一小段区间内应有的最多线段数一直不知道怎么记录。后来聪哥提醒我才明白,直接getans(l,r)不就完了吗_(:з」∠)_根本不用记录啊QwQ我用splay维护线段的位置顺序,查找前驱后继等等。上午因为懒得写插入线...
添加依赖:&lt;!-- pagehelper分页模块 --&gt;&lt;dependency&gt; &lt;groupId&gt;com.github.pagehelper&lt;/groupId&gt; &lt;artifactId&gt;pagehelper&lt;/artifactId&gt; &lt;version&gt;5.1.2&lt;/v
尤其是特殊字段如果有转意义字符就有问题使用 StringEscapeUtils.unescapeJavaScript(jsDataStr) 解决!!!
据说这是高手优化的mysql,供大家参考,其中连接数 max_connections=1500可以根据服务器的性能更改.pc136.com 版权所有#set-variable = connect_timeout=5#set-variable = wait_timeout=5 pc136.com 版权所有建议启用,负担重的服务器可以适当减少持续连接时间PC易上路[mysq...
今天在安装vmtools出现的找不到kernel headers的问题,主要原因是版本不匹配!在第一次安装时,提示gcc路径找不到,安装gcc以后又出现kerneal headers路径找不到。但是检查/usr/src/kernel路径时发现kernel文件时存在的。于是运行:rpm -qa|grep kernelkernel-tools-libs-3.10.0-957.el7.x86_64ker...