我有一个黑色背景上包含白色核的二进制图像。 对于我的处理,我需要从图像中消除那些被边界部分修剪过的原子核。
下面是一张图片,对于这种情况,我想删除顶部边框处的四个核,以及底部的四个核。我怎么能用OpenCV做到这一点?
我需要消除那些接触边界的原子核。
答案 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));
}
}
}