從下面的代碼中,我可以畫出最大的輪廓,質心標記爲小圓圈,船體爲黃色線。我如何繪製凸面缺陷?我應該使用circle()函數還是drawContours()函數?繪製凸起缺陷C++ OpenCV
Mat bw;
Mat canny_output;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(bw, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
int s = getBiggestContour(contours);
Mat drawing = Mat::zeros(src.size(), CV_8UC3); //UC1
Point2f mc = getCentroidPoint(contours[s]);
drawContours(drawing, contours, s, Scalar(255,255,255), -1, 8, hierarchy, 0, Point());
circle(drawing, mc, 4, Scalar(0,0,255), 1, 8, 0);
vector<vector<Point> >hull(contours[s].size());
convexHull(Mat(contours[s]), hull[s], false);
drawContours(drawing, hull, s, Scalar(0,255,255), 1, 8, vector<Vec4i>(), 0, Point());
上述工程的代碼,但只有一個輪廓要使用這是最大的輪廓,所以我認爲使用矢量>船體實在是太多了。我如何簡化?
下面的代碼是來自另一個stackoverflow的問題,但它並沒有顯示如何使用缺陷變量繪製到MAT圖像的凸性缺陷。這怎麼能實現?
vector<vector<int> > hullsI(contours.size());
vector<vector<Point> > hullsP(contours.size());
vector<vector<Vec4i> > defects(contours.size());
for(int i = 0; i <contours.size(); ++i){
//find the hulls
convexHull(contours[i], hullsI[i], false, false);
convexHull(contours[i], hullsP[i], false, true);
//find the defects
if (contours[i].size() >3){
convexityDefects(contours[i], hullsI[i], defects[i]);
}
}
我不想使用IplImage。我更喜歡馬特。
最好的答案,我發現是在這裏:HTTP://計算器。 com/a/14137154/616644 –