如何删除图像边框附近的项目

时间:2014-07-22 21:20:24

标签: c++ opencv border

我有一个黑色背景上包含白色核的二进制图像。 对于我的处理,我需要从图像中消除那些被边界部分修剪过的原子核。

下面是一张图片,对于这种情况,我想删除顶部边框处的四个核,以及底部的四个核。我怎么能用OpenCV做到这一点?

enter image description here

我需要消除那些接触边界的原子核。

1 个答案:

答案 0 :(得分:4)

扫描图像的边框,找到带有黑色的白色像素flood fill

您需要以下内容:

uchar white(255);

// do top and bottom row
for(int y = 0; y < image.rows; y += image.rows-1)
{
    uchar* row = image.ptr<uchar>(y)
    for(int x = 0; x < image.cols; ++x)
    {
        if(row[x] == white)
        {   
            cv::floodFill(image, cv::Point(x,y), cv::Scalar(0), (cv::Rect*)0, cv::Scalar(), cv::Scalar(200));
        }
    }
}
// fix left and right sides
for(int y = 0; y < image.rows; ++y)
{
    row = image.ptr<uchar>(y)
    for(int x = 0; x < image.cols; x += image.cols - 1)
    {
        if(row[x] == white)
        {   
            cv::floodFill(image, cv::Point(x,y), cv::Scalar(0), (cv::Rect*)0, cv::Scalar(), cv::Scalar(200));
        }
    }
 }