本帖最后由 下雨天 于 2019-1-18 16:57 编辑
//0.0图像二值化转换为单通道 Mat dstImage = Mat::zeros(inPUT.size(),CV_8UC1);
std::vector<cv::Mat> rgbChannels(3);
split(inPUT, rgbChannels); dstImage = rgbChannels[0];
Mat dss;
cv::copyMakeBorder(dstImage,dss,20,20,20,20,BORDER_ISOLATED,Scalar(255));
//1.0提取轮廓
vector<vector<Point>> contours;
vector<vector<Point>> contoursdis;
vector<Vec4i> hierarchy;
//
findContours(dss, contours, hierarchy,RETR_LIST,CHAIN_APPROX_NONE);
Point2f center;//最小包围圆的中心
float radius=0;//最小包围圆的半径
//2.0进行圆形半径判断(即在最小包围圆形中进行剔除小面积)
Mat imageContours1=Mat::zeros(dss.size(),CV_8UC1); //最小外结圆画布
for(int i=0;i < contours.size();i++)//遍历找到比250更小的圆区域
{
//绘制轮廓
//drawContours(imageContours1,contours,i,Scalar(255),1,8,hierarchy); //绘制轮廓的最小外结圆 minEnclosingCircle(contours[i],center,radius); if(0<radius && radius<250)
{
circle(imageContours1,center,radius,Scalar(255),1);
contoursdis.push_back(contours[i]);
drawMaxAreaLine(dss,contours[i]);
}
radius = 0;
}
if(contoursdis.size() != 0 ) {
drawContours(dss, contoursdis,-1, cv::Scalar(255), FILLED);
}
//roi扩充提取回来
Mat imageROI = dss(Rect(20, 20, inPUT.cols, inPUT.rows)); Mat cc; cc = imageROI.clone(); //imshow( "圆形包围切割掉的部分", imageContours1 ); imshow( "圆形包围处理之后的图", cc); return dstImage;
会出现黑色的区域应该全部被涂白,但是为啥黑色的边界不能呢???谢谢
|