如何在较大的垫子上复制垫子中包含的图像?

时间:2017-09-26 17:06:33

标签: c++ qt opencv

我试图将包含在垫子中的较小图像复制到另一张垫子中的另一张较大图像中。

下一个代码是原始的垫子。

{!! $variable !!}

这就是我想在上一篇文章中复制的内容:

{{ $variable }}

如您所见,更改图像的格式,使其与原始图像中的图像相同,但不起作用。

这个问题不同,因为我不想把图像放在普通图像上,就像在其他问题中一样,我想把图像的垫子放在另一张图像上....

1 个答案:

答案 0 :(得分:3)

您可以使用

Mat(Rect)指定ROI并复制它们。像

Mat big, small; 
cv::Rect rect;

small.copyTo(big(Rect));

必须初始化大小垫子。 Rect必须是小垫子的宽度和高度,x和y是大垫子的原点。

你必须检查垫子的大小(如果较小的垫子适合原点的大),垫子应该具有相同的钻头深度。

编辑: 完整示例

QImage src;
src.load(":/Sombrero.png"); // load to QImage

src = src.convertToFormat(QImage::Format::Format_RGB888); //convert to get sure the format
cv::Mat small(src.height(), src.width(), CV_8UC3, src.scanLine(0)); // convert the QImage to Mat

cv::Mat big(small.rows + 10, small.cols + 10, small.type(), cv::Scalar(0, 0, 0)); // generate a (10,10)px bigger mat
small.copyTo(big(cv::Rect(5, 5, small.cols, small.rows))); // copy the small to the big, you get a 5px black boarder

QImage result = QImage(big.data, big.cols, big.rows, 3 * big.cols, QImage::Format_RGB888); // if you want it back as QImage (3 is the count of channels)