Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何消除OpenCV C&XX2B图像裁剪后留下的空白间隙?x2B;?_C++_Image_Opencv - Fatal编程技术网

C++ 如何消除OpenCV C&XX2B图像裁剪后留下的空白间隙?x2B;?

C++ 如何消除OpenCV C&XX2B图像裁剪后留下的空白间隙?x2B;?,c++,image,opencv,C++,Image,Opencv,我正在写一个程序来分析图片并在图片中的一个物体周围裁剪它们。这个程序很好地处理了图像,但在侧面留下了一个奇怪的缺口 我从这个问题的批准答案中复制了代码: 我开始使用的图像在更大的画布上看起来像这样。我得到了这个结果,但我想去掉左边多余的空白,以便裁剪出离手机壳非常近的形状。如果在新选项卡中打开图像,可以更好地查看图像 请帮忙。我在VisualStudio 2015中使用OpenCV和C++。p> 由于以下原因,此图片未正确剪裁。为了摆脱它,你会使用。您可以使用模糊图像填充非黑名单,并使用此列表

我正在写一个程序来分析图片并在图片中的一个物体周围裁剪它们。这个程序很好地处理了图像,但在侧面留下了一个奇怪的缺口

我从这个问题的批准答案中复制了代码:

我开始使用的图像在更大的画布上看起来像这样。我得到了这个结果,但我想去掉左边多余的空白,以便裁剪出离手机壳非常近的形状。如果在新选项卡中打开图像,可以更好地查看图像

请帮忙。我在VisualStudio 2015中使用OpenCV和C++。p>

由于以下原因,此图片未正确剪裁。为了摆脱它,你会使用。您可以使用模糊图像填充非黑名单,并使用此列表正确裁剪原始图像。由于在噪声出现后,图像似乎被稍微放大了,您可能应该尝试使用孔径大小至少为5的方法来完全消除噪声

cv::Mat in = cv::imread("CropWhite.jpg");
cv::Mat blurred;
cv::medianBlur(in, blurred, 5);

if(模糊。at(j,i)!=cv::Vec3b(255255))
{
非黑名单。向后推(cv::点(i,j));
}

很难看到您的浏览器是否有白色背景。虽然如果你点击图像,chrome会在黑色背景上显示它。你不清楚。您是否复制了代码而没有修改它以去除白色背景?它检测黑色背景-如果不变,则不适用于白色。请尝试将此行:if(in.at(j,i)!=cv::Vec3b(0,0,0))更改为此行:if(in.at(j,i)!=cv::Vec3b(255255255)),如果您的背景为纯白色。抱歉造成混淆。我确实改变了这一行,就像@Mika提到的那样,这样它就有了Vec3b(255255)。背景是纯白色的,但正如drescherjm提到的,在一个新选项卡中打开图像会显示图像的侧面有一个大的白色条。这是运行编程后的结果。不过,我也希望把这个条剪下来。你提供的图片是原作的还是放大了的?非常感谢@zteffi!这张图片是按照我的要求裁剪的!有没有一种方法,我可以使用相同的方式裁剪图片,但在所有的边上都留一个空白?(可能所有边都是50像素?)bb是一个矩形,可以修改。bb.x-=50;bb.宽度+=100,依此类推。
if(blurred.at<cv::Vec3b>(j,i) != cv::Vec3b(255,255,255))
{
    nonBlackList.push_back(cv::Point(i,j));
}