如何在与第一张图像相同大小的新图像中保存一个图像的区域?例如,如果我有这样的图像:
我想创建另一个这样的图像:
这是我尝试过的:
#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 和掩码,但是您必须使用大小信息来创建掩码...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句