如何将 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 与蒙版一起使用,但您必须使用尺寸信息来创建蒙版...
如何将一张图片的一部分保存到与第一张图片大小相同的新图片中? 例如,如果我有这样的图像:
我想创建另一个像这样的图像:
这是我试过的:
#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 与蒙版一起使用,但您必须使用尺寸信息来创建蒙版...