滑县网站建设哪家好,南京 招网站开发,容桂品牌网站建设,淘宝网站建设好评语文章目录 approxPolyDP 轮廓周围绘制矩形boundingRectminAreaRect绘制圆和椭圆示例 approxPolyDP 轮廓周围绘制矩形
approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed)curve#xff1a;输入点集#xff0c;二维点向量的集合appro… 文章目录 approxPolyDP 轮廓周围绘制矩形boundingRectminAreaRect绘制圆和椭圆示例 approxPolyDP 轮廓周围绘制矩形
approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed)curve输入点集二维点向量的集合approxCurve输出点集表示拟合曲线或多边形数据与输入参数 curve 一致epsilon指定的近似精度原始曲线与近似曲线之间的最大距离close 闭合标志True 表示闭合多边形False 表示多边形不闭合boundingRect
boundingRect(InputArray points)得到轮廓周围最小矩形左上交点坐标和右下角点坐标绘制一个矩形minAreaRect
minAreaRect(InputArray points)得到一个旋转的矩形返回旋转矩形绘制圆和椭圆
cv::minEnclosingCircle(InputArray points, //得到最小区域圆形Point2f center, // 圆心位置float radius)// 圆的半径
cv::fitEllipse(InputArray points)得到最小椭圆示例
#include opencv2/opencv.hpp
#include iostream
#include math.husing namespace std;
using namespace cv;
Mat src, gray_src, drawImg;
int threshold_v 170;
int threshold_max 255;
const char* output_win rectangle-demo;
RNG rng(12345);
void Contours_Callback(int, void*);
int main(int argc, char** argv) {src imread(D:/vcprojects/images/hotball.png);if (!src.data) {printf(could not load image...\n);return -1;}cvtColor(src, gray_src, CV_BGR2GRAY);blur(gray_src, gray_src, Size(3, 3), Point(-1, -1));const char* source_win input image;namedWindow(source_win);namedWindow(output_win);imshow(source_win, src);createTrackbar(Threshold Value:, output_win, threshold_v, threshold_max, Contours_Callback);Contours_Callback(0, 0);waitKey(0);return 0;
}void Contours_Callback(int, void*) {Mat binary_output;vectorvectorPoint contours;vectorVec4i hierachy;threshold(gray_src, binary_output, threshold_v, threshold_max, THRESH_BINARY);//imshow(binary image, binary_output);findContours(binary_output, contours, hierachy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(-1, -1));vectorvectorPoint contours_ploy(contours.size());vectorRect ploy_rects(contours.size());vectorPoint2f ccs(contours.size());vectorfloat radius(contours.size());vectorRotatedRect minRects(contours.size());vectorRotatedRect myellipse(contours.size());for (size_t i 0; i contours.size(); i) {approxPolyDP(Mat(contours[i]), contours_ploy[i], 3, true);ploy_rects[i] boundingRect(contours_ploy[i]);minEnclosingCircle(contours_ploy[i], ccs[i], radius[i]);if (contours_ploy[i].size() 5) {myellipse[i] fitEllipse(contours_ploy[i]);minRects[i] minAreaRect(contours_ploy[i]);}}// draw itdrawImg Mat::zeros(src.size(), src.type());Point2f pts[4];for (size_t t 0; t contours.size(); t) {Scalar color Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));//rectangle(drawImg, ploy_rects[t], color, 2, 8);//circle(drawImg, ccs[t], radius[t], color, 2, 8);if (contours_ploy[t].size() 5) {ellipse(drawImg, myellipse[t], color, 1, 8);minRects[t].points(pts);for (int r 0; r 4; r) {line(drawImg, pts[r], pts[(r 1) % 4], color, 1, 8);}}}imshow(output_win, drawImg);return;
}