查找和绘制轮廓
findContours 会找到
vector> contours;
vector hierarchy;
f4 = Mat::zeros(frame.rows, frame.cols, CV_8UC3);
f5 = Mat::zeros(frame.rows, frame.cols, CV_8UC3);
findContours(f2, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, cv::Point());
int idx=0;
for( ; idx >= 0; idx = hierarchy[idx][0] ){
Scalar color( arc4random()&255, arc4random()&255, arc4random()&255 );
drawContours( f4, contours, idx, color, CV_FILLED, LINE_8, hierarchy );
drawContours( f5, contours, idx, color, 3, LINE_8, hierarchy );
}
// drawContours(f5, contours, -1, {0,255,0}, CV_FILLED, LINE_8);
threshold
morphologyEx+adaptiveThreshold
如果在空mat上绘制,先把mat的区域设置好,填充满黑色。
获得轮廓的矩形区域, 优化轮廓
获得轮廓
Moments m = moments(contours[idx]);
质心
int cx = int(m.m10/m.m00);
int cy = int(m.m01/m.m00);
面积 (面积小可以踢掉
m.m00
曲线优化 (epsilon百分比越低,越贴近原轮廓
vector<:point> approxCurve;
double epsilon = 0.002*arcLength(contours[idx], true);
approxPolyDP(contours[idx], approxCurve, epsilon, true);
vector> poolApproxCurve;
poolAppro