opencv学习之路(25)、轮廓查找与绘制(四)——正外接矩形
一、简介
二、外接矩形的查找绘制
1 #include "opencv2/opencv.hpp" 2 using namespace cv; 3 void main() 4 { 5 //外接矩形的查找绘制 6 Mat srcImg =imread("E://12.jpg"); 7 imshow("src",srcImg); 8 Mat dstImg = srcImg.clone(); //原图备份 9 cvtColor(srcImg, srcImg, CV_BGR2GRAY); //转为灰度图 10 threshold(srcImg, srcImg, 100, 255, CV_THRESH_BINARY); //二值化 11 12 vector<vector<Point>> contours; 13 vector<Vec4i> hierarcy; 14 findContours(srcImg, contours, hierarcy, CV_RETR_EXTERNAL, CHAIN_APPROX_NONE); //查找轮廓 15 vector<Rect> boundRect(contours.size()); //定义外接矩形集合 16 //drawContours(dstImg, contours, -1, Scalar(0, 0, 255), 2, 8); //绘制轮廓 17 int x0=0, y0=0, w0=0, h0=0; 18 for(int i=0; i<contours.size(); i++) 19 { 20 boundRect[i] = boundingRect((Mat)contours[i]); //查找每个轮廓的外接矩形 21 drawContours(dstImg, contours, i, Scalar(0, 0, 255), 2, 8); //绘制轮廓 22 x0 = boundRect[i].x; //获得第i个外接矩形的左上角的x坐标 23 y0 = boundRect[i].y; //获得第i个外接矩形的左上角的y坐标 24 w0 = boundRect[i].width; //获得第i个外接矩形的宽度 25 h0 = boundRect[i].height; //获得第i个外接矩形的高度 26 rectangle(dstImg, Point(x0, y0), Point(x0+w0, y0+h0), Scalar(0, 255, 0), 2, 8); //绘制第i个外接矩形 27 } 28 imshow("boundRect", dstImg); 29 waitKey(0); 30 }
三、分割硬币轮廓并计数
1 #include "opencv2/opencv.hpp" 2 #include<iostream> 3 using namespace cv; 4 using namespace std; 5 void main() 6 { 7 //分割硬币轮廓 8 Mat srcImg =imread("E://33.png"); 9 imshow("src", srcImg); 10 Mat dstImg = srcImg.clone(); //原图备份 11 cvtColor(srcImg, srcImg, CV_BGR2GRAY); //转为灰度图 12 threshold(srcImg, srcImg, 100, 255, CV_THRESH_BINARY); //二值化 13 Mat element = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1)); //获得结构元素 14 dilate(srcImg, srcImg, element); //膨胀操作 15 imshow("dilate",srcImg); 16 17 vector<vector<Point>> contours; 18 vector<Vec4i> hierarcy; 19 findContours(srcImg, contours, hierarcy, CV_RETR_EXTERNAL, CHAIN_APPROX_NONE); //查找轮廓 20 vector<Rect> boundRect(contours.size()); //定义外接矩形集合 21 int x0=0, y0=0, w0=0, h0=0,num=0; 22 for(int i=0; i<contours.size(); i++) 23 { 24 boundRect[i] = boundingRect((Mat)contours[i]); //查找每个轮廓的外接矩形 25 drawContours(dstImg, contours, i, Scalar(0, 0, 255), 2, 8); //绘制轮廓 26 x0 = boundRect[i].x; 27 y0 = boundRect[i].y; 28 w0 = boundRect[i].width; 29 h0 = boundRect[i].height; 30 if(w0>30 && h0>30)//筛选 31 { 32 rectangle(dstImg, Point(x0, y0), Point(x0+w0, y0+h0), Scalar(0, 255, 0), 2, 8); //绘制第i个外接矩形 33 num++; 34 } 35 } 36 cout<<"硬币数量:"<<num; 37 imshow("boundRect", dstImg); 38 waitKey(0); 39 }
四、简单车牌字符分隔
1 #include "opencv2/opencv.hpp" 2 using namespace cv; 3 void main() 4 { 5 //---简单车牌字符分隔 6 Mat srcImg =imread("E://Car2.jpg"); 7 Mat dstImg = srcImg.clone(); //原图备份 8 medianBlur(srcImg, srcImg, 5); //中值滤波 9 cvtColor(srcImg, srcImg, CV_BGR2GRAY); //转为灰度图 10 threshold(srcImg, srcImg, 100, 255, CV_THRESH_BINARY); //二值化 11 imshow("threshold", srcImg); 12 imwrite("F://car0.jpg", srcImg); 13 14 vector<vector<Point>> contours; 15 vector<Vec4i> hierarcy; 16 findContours(srcImg, contours, hierarcy, CV_RETR_TREE, CHAIN_APPROX_NONE); //查找所有轮廓 17 vector<Rect> boundRect(contours.size()); //定义外接矩形集合 18 int x0=0, y0=0, w0=0, h0=0; 19 for(int i=0; i<contours.size(); i++) 20 { 21 boundRect[i] = boundingRect((Mat)contours[i]); //查找每个轮廓的外接矩形 22 x0 = boundRect[i].x; 23 y0 = boundRect[i].y; 24 w0 = boundRect[i].width; 25 h0 = boundRect[i].height; 26 if(w0>srcImg.cols/12 && w0<srcImg.cols/5 && h0>srcImg.rows/6 && h0<srcImg.rows*5/6) 27 { 28 char pic_name[10]; 29 sprintf(pic_name, "F:\\%d.bmp", i); 30 Mat ROI = dstImg(Rect(x0, y0, w0, h0)); 31 imwrite(pic_name, ROI); 32 rectangle(dstImg, Point(x0, y0), Point(x0+w0, y0+h0), Scalar(0, 255, 0), 2, 8); //绘制第i个外接矩形 33 } 34 } 35 imshow("boundRect", dstImg); 36 waitKey(0); 37 }
转载于:https://www.cnblogs.com/little-monkey/p/7429381.html
opencv学习之路(25)、轮廓查找与绘制(四)——正外接矩形相关推荐
- opencv 轮廓查找, 凸包,最小外接矩形,最小外接圆,最小外接椭圆
本章内容: 1. 轮廓查找 2. 绘制轮廓 3. 凸包 4.最小外接矩形 5.最小外接圆 6.最小外接椭圆 1.搜索轮廓 2.绘制轮廓 输出结果 3.凸包 输出结果 4.最小外接矩形 输出结果 5.最 ...
- python使用opencv查找轮廓_(八)OpenCV-Python学习—轮廓查找,绘制和拟合
针对物体轮廓,opencv还提供了一些相关的函数,来处理轮廓查找,绘制,拟合,以及计算轮廓周长和面积等,详细介绍如下: 1. 寻找和绘制轮廓 opencv的findContours()能寻找图片中的轮 ...
- OpenCV学习笔记(九)——图像轮廓(下)
<OpenCV轻松入门:面向Python>学习笔记(九) 1-3 查找并绘制轮廓.矩特性及Hu矩 4-5 轮廓拟合及凸包 6. 利用形状场景算法比较轮廓 6.1 计算形状场景距离 6.2 ...
- Framework学习之路(一)—— UI绘制深入源码分析
Framework学习之路(一)-- UI绘制深入源码分析 本篇为笔者对Android SDK 33版本的UI绘制入口进行追踪的过程,主要作笔记作用.由于笔者经验尚浅,水平也有限,所以会存在很多不足的 ...
- python外包凹多边形生成_Python实现图片查找轮廓、多边形拟合、最小外接矩形代码...
1.概述 经常用到轮廓查找和多边形拟合等opencv操作,因此记录以备后续使用.本文代码中的阈值条件对图片没有实际意义,仅仅是为了测试. 原图为: 2.测试代码: import cv2 import ...
- 小白菜的opencv学习(3)在图像上绘制和写字
小白菜的opencv学习(3)在图像上绘制和写字 我们知道,机器视觉在识别后最直接观察的办法就是画出来,把人物.图形描述出来.今天就学习如何在图像上绘制和写字.文章最后会尝试在摄像头采集的视频中绘制写 ...
- OpenCV学习之路(附加资料分享)
目录 一.前言 二.学习历程 三.学习资料 书籍 网站 视频教程 四.学习建议 入门 强化 灵通 一.前言 有人问我,学习opencv从哪里学起?有人问我,我学习opencv用到了哪些资料?所以在今天 ...
- 【OpenCV 学习之路】(8)数独提取之一
写在前面: 关于本次的数独识别项目,我先说明下情况: 这是本人18年6月份做的,现在把当时的笔记整理出来(口吻的描述是以当时的时间来描述). 这个数独的项目分别做了两次, 第一次做的还没做完,第二次可 ...
- Opencv 学习之路(一)
前面很长一段时间一直在用opencv库但是一直没有去系统的学习,都是遇到问题直接百度,连库内大多数函数都不认识.最近闲下来了打算系统将opencv学习下 1.打开图片 2.读取视频 3.打开摄像头拍照 ...
最新文章
- 手把手教你从系统层面优化深度学习计算
- 人脸口罩检测现开源PyTorch、TensorFlow、MXNet等全部五大主流深度学习框架模型和代码...
- 微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别
- 线程池:ThreadPoolExecutor
- 后端技术:MyBatis 知识点整理,值得收藏!
- Nginx支持比Apache高并发的原因
- 23种设计模式之适配器模式
- 我的世界pc正版好玩的服务器,都来看看好玩的服务器
- Thinking in ReactJS and Flux
- mysql ip 访问_MySql通过ip地址进行访问的方法
- 28 Implement strStr() @Python
- Layui富文本编辑器提交表单时获取内容为空
- 经纬度(度分秒)和十进制相互转换
- 分享一个更高效的数据清理方法,建议收藏
- 2021年山东省职业院校技能大赛中职组”网络安全“正式赛题
- 在docker中运行自己的eureka服务端
- 计算机病毒通常隐藏在 中 2分,计算机考试题
- 无线路由频繁掉线9大原因分析
- 一个挑战 ViT,MLP-Mixer 的新模型 ConvMixer:Patches Are All You Need? [Under Review ICLR 2022]
- 经常玩电脑正确的坐姿_告诉你电脑族的最佳坐姿_养生人群_养生之道网
热门文章
- iphone降级_今年 iPhone 将支持手写笔?乔老爷哭了!
- 基于Android的红外测温设计,基于Android的红外三维重构移动APP设计与实现
- c语言 feof_C语言 实现简单功能的12306火车售票系统【附源码】
- 浅析移动端网站是如何做好前期策划工作的?
- linux nice线程,linux nice 线程
- mfc上位机网络接收图片并显示_工控机上位机软件的开发历程
- 开发日记-20190915 关键词 汇编语言王爽版 第九章
- android从放弃到精通 第五天 excellent
- Deep Belief Network简介——本质上是在做逐层无监督学习,每次学习一层网络结构再逐步加深网络...
- spark 类标签的稀疏 特征向量