如何将 Mat 的矩形区域复制为相同大小的新 Mat?

How to copy a rectangular area of a Mat a new Mat of the same size?

如何将一张图片的一部分保存到与第一张图片大小相同的新图片中? 例如,如果我有这样的图像:

我想创建另一个像这样的图像:

这是我试过的:

#include <opencv2/opencv.hpp>
#include "iostream"

using namespace cv;
using namespace std;

int main()
{
    Mat src = imread("1.png");
    Mat dst;

    src(Rect(85, 45, 100, 100)).copyTo(dst);
    imshow("tmask", dst);

    waitKey(0);
    return 0;
}

但是结果会是这样的:

这不是我想要的。

需要程序初始化Mat dst的大小,这里写的太长了。 如何在不初始化它的大小的情况下生成上面的第二个图像(dst)?

创建一个新图像并将子图像复制到 roi

cv:: Mat img = cv::imread(...);
cv::Rect roi(x,y,w,h);

cv::Mat subimage= img(roi); // embedded
cv::Mat subimageCopied = subimage.clone(); // copied

cv::Mat newImage=cv::Mat::zeros(img.size(), img.type);

img(roi).copyTo(newImage(roi); // this line is what you want.

如果您可以访问原始图像,但不允许使用其 siute 信息,则可以将 .copyTo 与蒙版一起使用,但您必须使用尺寸信息来创建蒙版...