MSER 特征可以从图像中提取形状。利用 MSER 得到的结果,我们来构建一个在图像中监测四边形区域的算法。要获取 MSER 的二值图像非常简单:
components= components==255;
cv::morphologyEx(components,components,
cv::MORPH_OPEN,cv::Mat(),
cv::Point(-1,-1),3);
下一步是获取轮廓:
cv::Mat componentsInv= 255-components;
cv::findContours(componentsInv,
contours,
cv::RETR_EXTERNAL,
cv::CHAIN_APPROX_NONE);
最后得到全部轮廓,并用多边形粗略地逼近它们:
cv::Mat quadri(components.size(),CV_8U,255);
std::vector<std::vector<cv::Point>>::iterator it= contours.begin();
while (it!= contours.end()) {
poly.clear();
cv::approxPolyDP(*it,poly,10,true);
if (poly.size()==4) {
cv::polylines(quadri, poly, true, 0, 2);
}
++it;
}
|