imgproc模块--可倾斜边界
来源:互联网 发布:中国五矿待遇知乎 编辑:程序博客网 时间:2024/05/21 04:41
1.目的
(1)使用openCV函数minAreaRect获取矩形边界
(2)使用openCV函数fitEllipse获取椭圆边界
2.完整代码
(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"Mat src; Mat src_gray;int thresh = 100;int max_thresh = 255;RNG rng(12345);/** @function thresh_callback */void thresh_callback(int, void* ){ Mat threshold_output; vector<vector<Point> > contours; vector<Vec4i> hierarchy; /// 阈值化检测边界 threshold( src_gray, threshold_output, thresh, 255, THRESH_BINARY ); /// 寻找轮廓 findContours( threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) ); /// 对每个找到的轮廓创建可倾斜的边界框和椭圆 vector<RotatedRect> minRect( contours.size() ); vector<RotatedRect> minEllipse( contours.size() ); for( int i = 0; i < contours.size(); i++ ) { //返回轮廓的矩形边界框 minRect[i] = minAreaRect( Mat(contours[i]) ); if( contours[i].size() > 5 ) { //返回轮廓的椭圆边界框 minEllipse[i] = fitEllipse( Mat(contours[i]) ); } } /// 绘出轮廓及其可倾斜的边界框和边界椭圆 Mat drawing = Mat::zeros( threshold_output.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) ); // contour drawContours( drawing, contours, i, color, 1, 8, vector<Vec4i>(), 0, Point() ); // ellipse ellipse( drawing, minEllipse[i], color, 2, 8 ); // rotated rectangle Point2f rect_points[4]; minRect[i].points( rect_points ); for( int j = 0; j < 4; j++ ) line( drawing, rect_points[j], rect_points[(j+1)%4], color, 1, 8 ); } /// 结果在窗体中显示 namedWindow( "Contours", CV_WINDOW_AUTOSIZE ); imshow( "Contours", drawing );}/** @function main */int main( int argc, char** argv ){ /// 加载源图像 src = imread( argv[1], 1 ); /// 转为灰度图并模糊化 cvtColor( src, src_gray, CV_BGR2GRAY ); blur( src_gray, src_gray, Size(3,3) ); /// 创建窗体 char source_window[] = "Source"; namedWindow( source_window, CV_WINDOW_AUTOSIZE ); imshow( source_window, src ); createTrackbar( " Threshold:", "Source", &thresh, max_thresh, thresh_callback ); thresh_callback( 0, 0 ); waitKey(0); return(0);}
参考文献
1.http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/shapedescriptors/bounding_rotated_ellipses/bounding_rotated_ellipses.html
阅读全文
0 0
- imgproc模块--可倾斜边界
- imgproc模块—图像添加边界
- imgproc模块—圆形和矩形边界
- OpenCV之imgproc 模块. 图像处理(5)在图像中寻找轮廓 计算物体的凸包 创建包围轮廓的矩形和圆形边界框 为轮廓创建可倾斜的边界框和椭圆 轮廓矩 多边形测试
- opencv c++函数 imgproc模块 7 给图像添加边界
- 为轮廓创建可倾斜的边界框和椭圆
- opencv c++函数 imgproc模块 22 创建包围轮廓的矩形和圆形边界框
- 为轮廓创建可倾斜的边界框和椭圆-- minAreaRect()和fitEllipse()
- OpenCV imgproc模块
- OpenCV imgproc模块(二)
- opencv imgproc模块(三)
- opencv imgproc模块(四)
- imgproc模块/linear filter
- imgproc模块/image pyramids
- imgproc模块--图像金字塔
- imgproc模块--霍夫圆变换
- imgproc模块--直方图
- imgproc模块--直方图比较
- asp.net常用技能
- tcp粘包,断包?websocker 帧?
- 【机器学习PAI实践九】如何通过机器学习实现云端实时心脏状况监测
- OpenCV中的Resize函数和Reshape函数
- java多线程之sleep(long millis)方法
- imgproc模块--可倾斜边界
- 使用squid搭建yum源代理服务器和客户端
- scrollTop上移和下移
- windows环境下 apache配置https协议
- java可视化编程-eclipse安装windowbuilder插件
- 对TCP/IP协议的深入浅出总结
- Oracle 行转列pivot 、列转行unpivot 的Sql语句总结
- postman中 form-data、x-www-form-urlencoded、raw、binary的区别
- java 正则表达式