主要步驟
- 用
findContours
獲取連通域輪廓 - 通過
Moments
對象獲取輪廓所在重心 findContours
函數(shù)的講解
實現(xiàn)代碼
#include<iostream>
#include<opencv2\opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat src = imread("F:\\testdata\\test.jpg", 0);
threshold(src, src, 0, 255, THRESH_OTSU);
//獲取圖像輪廓
vector<vector<Point>>contours; //每個輪廓中的點
vector<Vec4i>hierarchy; //輪廓的索引?忙迁?碎乃?
findContours(src, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());
for (int i = 0; i < contours.size(); ++i)
{
Mat tmp(contours.at(i));
Moments moment=moments(tmp, false);
if (moment.m00 != 0)//除數(shù)不能為0
{
int x = cvRound(moment.m10 / moment.m00);//計算重心橫坐標
int y = cvRound(moment.m01 / moment.m00);//計算重心縱坐標
circle(src, Point(x, y), 5, Scalar(0));
}
}
imshow("src", src);
waitKey(0);
return 0;
}
程序效果
原圖
標記重心