1.数据源为8通道灰度图像
2.外接矩形、边缘轮廓、中心点
3.周长、面积(几何积分值)
4.最大、最小外接矩形
5.外接圆,外接椭圆
1.数据源为8通道灰度图像
//转换成8通道
cvtColor(image, imageGray, COLOR_BGR2GRAY);
2.外接矩形、边缘轮廓、中心点
//mode:轮廓提取方式:RETR_EXTERNAL提取最外层,RETR_TREE 表示出其层次
//method:轮廓逼近方式:CHAIN_APPROX_SIMPLE 4个点 ,CHAIN_APPROX_NONE 边线
findContours(imageGray, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
//在哪绘制轮廓 -1 表示绘制所有的轮廓 绘制的颜色,线宽是2,如果为-1 就是填充;绘制的图色是8领域的
drawContours(imageCopy, contours, -1, Scalar(0, 0, 255), 2, 8);
3.周长、面积(几何积分值)、中心点
/*contours存的是图片点阵
面积 contourArea
周长 arcLength
中心点
*/
for (int i = 0; i < contours.size(); i++)
{
Moments M = moments(contours[i]);
int x = int(M.m10 / double(M.m00));// x y点的均值 x方向坐标的总和/像素的总和
int y = int(M.m01 / double(M.m00));// y方向坐标的总和/像素的总和
//几何积分:面积 周长
double area = contourArea(contours[i]);
double len = arcLength(contours[i], true);
//Mark the center
circle(imageCopy, Point(x, y), 10, Scalar(255, 0, 0), -1);
}
4.最大、最小外接矩形
最大外接矩形点阵:boundingRect(),rectangle()
最小外接矩形点阵:minAreaRect(),polylines()
//最大外接矩形
Rect box = boundingRect(contours[i]);
rectangle(imageCopy, box, Scalar(0, 255, 0), 2, 8, 0);
//最小外接矩形
imageCopy = image.clone();
RotatedRect rotrect;
Point2f rect_points[4];
Mat boxPoints2f, boxPointsCov;
for (size_t i = 0; i < contours.size(); i++)
{
//获取最小外接矩形点阵
rotrect = minAreaRect(contours[i]);
boxPoints(rotrect, boxPoints2f);
boxPoints2f.assignTo(boxPointsCov, CV_32S);
//绘制多边型
polylines(imageCopy, boxPointsCov, true, Scalar(0, 255, 255), 2);
}
imshow("minrectangle", imageCopy);
5.外接圆(点阵,圆心,半径),外接椭圆
获取点阵:minEnclosingCircle() ;画圆:circle()
获取点阵:fitEllipse();画圆:ellipse()
//外接圆 圆心,半径
imageCopy = image.clone();
Point2f center;
float radius;
for (size_t i = 0; i < contours.size(); i++)
{
minEnclosingCircle(contours[i], center, radius);
circle(imageCopy, center, radius, Scalar(255, 125, 125), 2);
}
imshow("外接圆", imageCopy);
waitKey(0);
//外接椭圆
imageCopy = image.clone();
RotatedRect rellipse;
for (size_t i = 0; i < contours.size(); i++) {
if (contours[i].size() < 5)
continue;
rellipse = fitEllipse(contours[i]);
ellipse(image, rellipse, Scalar(255, 0, 125), 2);
}
imshow("外接椭圆", image);
原文链接: https://www.cnblogs.com/jasmineTang/p/14515488.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/208735
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!