imgproc模块—圆形和矩形边界
来源:互联网 发布:淘宝pc 编辑:程序博客网 时间:2024/05/20 05:57
1.目的
(1)使用OpenCV函数 boundingRect 来计算包围轮廓的矩形框.
(2)使用OpenCV函数 minEnclosingCircle 来计算完全包围已有轮廓最小圆.
2.部分代码解释
(1)approxPolyDP
/*approxPolyDP参数解释 contours[i]:输入的二维轮廓,以点集表示 contours_poly[i]:输出近似的多边形轮廓,以点集表示 epsilon:估算精度,表示输入和输出的最小距离 closed:输出轮廓是否闭合,true表示闭合,false表示不闭合 */ approxPolyDP(contours[i], contours_poly[i], 3, true);
(2)boundingRect
/* boundingRect参数解释 contours_poly[i]:输入的二维轮廓,以点集表示 返回值:一个描述矩形边框的实例,tl()表示左上角的坐标点,br()表示右下角的坐标点 */ boundRec[i] = boundingRect(contours_poly[i]);
(3)minEnclosingCircle
/* minEnclosingCircle参数解释 contours_poly[i]:输入的二维轮廓, 以点集表示 center[i]:包围二维轮廓的最小圆的圆心 radius[i]:圆的半径 */ minEnclosingCircle(contours_poly[i], center[i], radius[i]);
3.完整代码
(1)CommonInclude.h
#ifndef COMMON_INCLUDE#define COMMON_INCLUDE#include<iostream>#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/imgproc.hpp>using namespace std;using namespace cv;#endif
(2)Bounding.cpp
#include"CommonInclude.h"int thresh = 50;int max_thresh = 85;Mat src, src_gray, src_blur, dst;RNG rng(12345);char windowName[] = "Bounding";void ThreshCallback(int,void*){ vector< vector<Point> > contours; vector< Vec4i > hirerachy; //canny边缘检测 Canny(src_gray, dst, thresh, max_thresh, 3); //寻找轮廓 findContours(dst, contours, hirerachy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0,0)); cout << contours.size() << endl; vector< vector<Point> > contours_poly(contours.size()); vector< Rect > boundRec(contours.size()); vector< Point2f > center(contours.size()); vector< float > radius(contours.size()); for(int i=0; i<contours.size(); i++){ /*approxPolyDP参数解释 contours[i]:输入的二维轮廓,以点集表示 contours_poly[i]:输出近似的多边形轮廓,以点集表示 epsilon:估算精度,表示输入和输出的最小距离 closed:输出轮廓是否闭合,true表示闭合,false表示不闭合 */ approxPolyDP(contours[i], contours_poly[i], 3, true); //获取轮廓的矩形边界框 /* boundingRect参数解释 contours_poly[i]:输入的二维轮廓,以点集表示 返回值:一个描述矩形边框的实例,tl()表示左上角的坐标点,br()表示右下角的坐标点 */ boundRec[i] = boundingRect(contours_poly[i]); //获取轮廓的圆形边界 /* minEnclosingCircle参数解释 contours_poly[i]:输入的二维轮廓, 以点集表示 center[i]:包围二维轮廓的最小圆的圆心 radius[i]:圆的半径 */ minEnclosingCircle(contours_poly[i], center[i], radius[i]); } //绘制轮廓 Mat drawing = Mat::zeros(dst.size(), CV_8UC3); for(int i=0; i<contours.size(); i++){ Scalar color = Scalar(rng.uniform(0,255), rng.uniform(0,255), rng.uniform(0,255)); drawContours(drawing, contours_poly, i, color, 2, 8); rectangle(drawing, boundRec[i].tl(), boundRec[i].br(), color, 2, 8); circle(drawing, center[i], radius[i], color, 2, 8); } imshow(windowName, drawing);}int main(int argc, char** argv){ if(argc < 2){ cout << "more parameters are required!!!" << endl; return(-1); } namedWindow(windowName, CV_WINDOW_AUTOSIZE); src = imread(argv[1]); //高斯平滑 GaussianBlur(src, src_blur, Size(3,3), 0, 0); //转化成灰度图像 cvtColor(src_blur, src_gray, CV_BGR2GRAY); createTrackbar("Thesh:", windowName, &thresh, max_thresh, ThreshCallback); ThreshCallback(0,0); waitKey(0); return(0);}
参考文献
1.http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html#bounding-rects-circles
阅读全文
0 0
- imgproc模块—圆形和矩形边界
- opencv c++函数 imgproc模块 22 创建包围轮廓的矩形和圆形边界框
- imgproc模块—图像添加边界
- 给轮廓画出矩形和圆形边界
- 给轮廓画出矩形和圆形边界
- imgproc模块--可倾斜边界
- OpenCV之imgproc 模块. 图像处理(5)在图像中寻找轮廓 计算物体的凸包 创建包围轮廓的矩形和圆形边界框 为轮廓创建可倾斜的边界框和椭圆 轮廓矩 多边形测试
- 创建包围轮廓的矩形和圆形边界框
- imgproc模块—腐蚀和膨胀
- 创建包围轮廓的矩形和圆形边界框--boundingRect()、minEnclosingCircle()和approxPolyDP()
- 创建包围轮廓的矩形和圆形边界框--boundingRect()、minEnclosingCircle()和approxPolyDP()
- opencv c++函数 imgproc模块 7 给图像添加边界
- imgproc模块—霍夫线变换
- Python画矩形和圆形
- imgproc模块—Sobel边缘检测算子
- imgproc模块—仿射变换
- 圆形 矩形
- OpenCV imgproc模块
- 实现敌人(怪物)的简单AI(自动巡逻、看到玩家攻击玩家、玩家离开恢复自动巡逻)
- 在finder中显示隐藏文件
- 获取某一目录下某一类文件的文件名(QDir)
- Python机器学习应用 | 监督学习
- 搬砖中的小事(四)之工具--通过打开的文件进入其所在的目录配置
- imgproc模块—圆形和矩形边界
- CodeForces
- Android Coding 利器 之 掌握小技巧,助你Coding更上一层楼~
- Android嵌套滑动机制(NestedScrolling)
- JIT技术
- mysql提高快速插入数据的方法
- MySQL过滤数据.md
- 流
- 找工作不看钱,其实还应该看这些!