opencv之常用还是忘,那咋办嘛

Rect tl()左上角点坐标 br()右下角点坐标

//切割ROI
Mat ROI = threshold_output(Rect(boundRect[i].tl(), boundRect[i].br()));

逼近多边形:approxPolyDP(Mat(contours[i]), contours_poly[i], 3, true);

返回外部矩形边界:boundRect[i] = boundingRect(Mat(contours[i]));//参数为输入的二维点集可以是vector或Mat类型

寻找最小包围矩形:RotatedRect minRect = minAreaRect(Mat(contours[i]));参数为输入的二维点集可以是vector或Mat类型
Point2f vertex[4];//用于存放最小矩形的四个顶点
minRect.points(vertex);//返回矩形的四个顶点给vertex
//绘制最小面积包围矩形
vector min_rectangle;
for (int i = 0; i < 4; i++)
{
line(drawing, vertex[i], vertex[(i + 1) % 4], Scalar(255, 0, 0), 1, 8);//非常巧妙的表达式
min_rectangle.push_back(vertex[i]);//将最小矩形的四个顶点以Point的形式放置在vector容器中
}

最小包围圆:minEnclosingCircle(contours[i], center, radius);//寻找最小包围圆
circle(drawing, center, cvRound(radius), Scalar(0, 255, 0), 1, 8);//绘制最小包围圆,cvRound对半径进行四舍五入

    //找轮廓重心
                vector<Moments> mu(contours.size());
                mu[i] = moments(contours[i], false);
                double a = mu[i].m10 / mu[i].m00; 
                double b = mu[i].m01 / mu[i].m00;
                //cout << i << "******" << "(" << a << "," << b << ")" << endl;
                Point p = Point(a, b);
                circle(drawing, p, 1, Scalar(0, 0, 255), 3, 8);//重心

画轮廓:drawContours(drawingROI, contoursROI, j, Scalar(0, 0, 255), 2);//contoursROI到drawingROI

猜你喜欢

转载自www.cnblogs.com/xingkongcanghai/p/11746595.html