概述
OpenCV中绘制外围矩形框和圆框
利用边界寻找函数找到的边界坐标信息。然后利用每一条寻找到的边际信息去找到图形的矩形边界和圆形边界。
一、 OpenCV中绘制外围矩形框
根据已知的边界信息点。将边界信息传入提供的API函数得到该边界的矩形框。
API:Rect boundingRect(Mat(输入点集));
下面是具体的使用方法:
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)。
minEnclosingCircle(
Mat(输入点集),
Point2f& 圆心,
float& 半径,
);
具体的使用方法如下:
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);
}
全部的代码如下:
#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中绘制外围矩形框和圆框所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复