【问题标题】:remove the black space surrounding the image using opencv c++使用opencv c ++删除图像周围的黑色空间
【发布时间】:2018-06-18 14:46:48
【问题描述】:

美好的一天!我正在使用 imwrite 命令在 OpenCV(C++)中裁剪它们后保存下面的图像,但它似乎包含了围绕它的黑色部分。我想要的只是保存裁剪的那个。请帮忙。

这是我的代码

Mat mask,draft,res;
int nPixels;
char c=0;

while(true && c!='q') {
        imshow("SAMPLE", img);
        if(!roi.isSet())
            roi.set("SAMPLE");
        if (roi.isSet()) {
                roi.createMask(img.size());
                mask = roi.getMask();
                res = mask & img.clone();
                imwrite("masked.png",res);

                imshow("draft", res);


        }

        c = waitKey(1); 

    }

【问题讨论】:

  • 没有图片。此外,您能否包含用于裁剪和保存图像的代码?请提供Minimal, Complete, and Verifiable example
  • 需要看一些代码
  • 垫掩码,草稿,res;整数 nPixels;字符 c=0; while(true && c!='q') { imshow("SAMPLE", img); if(!roi.isSet()) roi.set("SAMPLE"); if (roi.isSet()) { roi.createMask(img.size());掩码 = roi.getMask(); res = mask & img.clone(); imwrite("masked.png",res); imshow("草稿", res); } c = waitKey(1); }
  • 编辑您的问题并添加代码。它作为评论不可读。
  • 遮罩和裁剪是完全不同的东西。

标签: c++ opencv


【解决方案1】:

这是一个如何裁剪图像并保存裁剪图像的示例(参见 api55 的评论)。也许这对你有帮助。

cv::Mat img = cv::imread("Path/To/Image/image.png", cv::IMREAD_GRAYSCALE);
if(image.empty())
  return -1;

cv::Rect roi(0, 0, 100, 100); // define roi here as x0, y0, width, height
cv::Mat cropedImg(img, roi);

cv::imwrite("Path/To/Save/Location/cropedImage.png", cropedImg);

【讨论】: