我正在编写一个程序来分析图片并将它们围绕图片中的对象裁剪。该程序可以很好地裁剪图像,但在侧面留下了奇怪的空白。
我在这个问题上复制了批准答案中的代码: Opencv c++ detect and crop white region on image
我开始的图像在更大的画布上看起来像这样。我得到了这个结果,但我想摆脱左侧的额外空白区域,以便在手机外壳附近裁剪。如果在新选项卡中打开图像,可以看得更清楚。
请帮忙。我在Visual Studio 2015中使用opencv和c ++。
答案 0 :(得分:1)
由于salt-and-pepper noise,此图片未正确裁剪。要摆脱它,你要使用median blur。您可以使用模糊图像填充nonBlackList并使用此列表正确裁剪原始图像。由于看起来图像在噪声出现后略微放大,您应该尝试至少5个光圈尺寸以完全摆脱它。
cv::Mat in = cv::imread("CropWhite.jpg");
cv::Mat blurred;
cv::medianBlur(in, blurred, 5);
...
if(blurred.at<cv::Vec3b>(j,i) != cv::Vec3b(255,255,255))
{
nonBlackList.push_back(cv::Point(i,j));
}