OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 2800|回复: 1

求为啥我用drawContours这个函数会留有一个边缘呢

[复制链接]
发表于 2019-1-18 16:54:39 | 显示全部楼层 |阅读模式
本帖最后由 下雨天 于 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;
会出现黑色的区域应该全部被涂白,但是为啥黑色的边界不能呢???谢谢

回复

使用道具 举报

发表于 2019-1-18 21:36:57 | 显示全部楼层
请把代码整理好重新发下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-3-29 20:55 , Processed in 0.009265 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表