我是靠谱客的博主 开放斑马,这篇文章主要介绍OpenCV中绘制外围矩形框和圆框OpenCV中绘制外围矩形框和圆框,现在分享给大家,希望可以做个参考。

OpenCV中绘制外围矩形框和圆框

利用边界寻找函数找到的边界坐标信息。然后利用每一条寻找到的边际信息去找到图形的矩形边界和圆形边界。

一、 OpenCV中绘制外围矩形框

根据已知的边界信息点。将边界信息传入提供的API函数得到该边界的矩形框。

复制代码
1
2
API:Rect boundingRect(Mat(输入点集));

下面是具体的使用方法:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void rec(int,void*) { Mat out_put; vector<vector<Point>> contours; vector<Vec4i> hierarchy; Canny(src_gray,dst,thres,2*thres); findContours(dst,contours,hierarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,Point(0,0)); vector<Rect> rect_size(contours.size()); vector<Point2f> circle_p(contours.size()); vector<float> circle_r(contours.size()); for(int i = 0;i < contours.size();i++) { rect_size[i] = boundingRect(Mat(contours[i])); } out_put = Mat::zeros(src.size(),CV_8UC3); for(int i = 0;i < rect_size.size();i++) { rectangle(out_put,rect_size[i],Scalar(0,255,0),2,8); } imshow("out_put",out_put); }

OpenCV中绘制外围圆形框

根据已经知道的边界信息点,得到圆形框的圆心(存储类型vector)和半径(存储类型vector)。

复制代码
1
2
3
4
5
6
minEnclosingCircle( Mat(输入点集), Point2f& 圆心, float& 半径, );

具体的使用方法如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void rec(int,void*) { Mat out_put; vector<vector<Point>> contours; vector<Vec4i> hierarchy; Canny(src_gray,dst,thres,2*thres); findContours(dst,contours,hierarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,Point(0,0)); vector<Rect> rect_size(contours.size()); vector<Point2f> circle_p(contours.size()); vector<float> circle_r(contours.size()); for(int i = 0;i < contours.size();i++) { rect_size[i] = boundingRect(Mat(contours[i])); minEnclosingCircle(Mat(contours[i]),circle_p[i],circle_r[i]); } out_put = Mat::zeros(src.size(),CV_8UC3); for(int i = 0;i < rect_size.size();i++) { // rectangle(out_put,rect_size[i],Scalar(0,255,0),2,8); circle(out_put,circle_p[i],circle_r[i],Scalar(0,0,255),2,8); } imshow("out_put",out_put); }

全部的代码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include "opencv2/highgui/highgui_c.h" #include "opencv2/opencv.hpp" #include<iostream> using namespace std; using namespace cv; Mat src,src_gray,dst; int thres = 100; void rec(int,void*); int main() { src = imread("/home/dynamicw/Project/C++_Project/opencvtest/src/lesson01/source/map.png"); cvtColor(src,src_gray,COLOR_BGR2GRAY); blur(src_gray,src_gray,Size(3,3)); imshow("src_gray",src_gray); namedWindow("test",CV_WINDOW_AUTOSIZE); createTrackbar("value","test",&thres,255,rec); rec(0,0); waitKey(0); return 0; } void rec(int,void*) { Mat out_put; vector<vector<Point>> contours; vector<Vec4i> hierarchy; Canny(src_gray,dst,thres,2*thres); findContours(dst,contours,hierarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,Point(0,0)); vector<Rect> rect_size(contours.size()); vector<Point2f> circle_p(contours.size()); vector<float> circle_r(contours.size()); for(int i = 0;i < contours.size();i++) { rect_size[i] = boundingRect(Mat(contours[i])); minEnclosingCircle(Mat(contours[i]),circle_p[i],circle_r[i]); } out_put = Mat::zeros(src.size(),CV_8UC3); for(int i = 0;i < rect_size.size();i++) { // rectangle(out_put,rect_size[i],Scalar(0,255,0),2,8); circle(out_put,circle_p[i],circle_r[i],Scalar(0,0,255),2,8); } imshow("out_put",out_put); }

最后

以上就是开放斑马最近收集整理的关于OpenCV中绘制外围矩形框和圆框OpenCV中绘制外围矩形框和圆框的全部内容,更多相关OpenCV中绘制外围矩形框和圆框OpenCV中绘制外围矩形框和圆框内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(83)

评论列表共有 0 条评论

立即
投稿
返回
顶部