4

我在 Win7 x64 上工作,使用 openCV 和 Visual Studio 2010,使用 c++ 编程。我想将图像(称为image)复制到另一个图像的矩形区域(称为RR_image)。然而,这个区域是旋转的。

这是图像

在此处输入图像描述

这是RR_image:( 在此处输入图像描述 如您所见,我已经旋转了第一张图片)

我会在红色矩形中复制第一张图像。

有多少种方法可以做到这一点?

我了解投资回报率,并且:img1.copyTo(img2.rowRange(...), img2.colRange(...));

谢谢!

4

2 回答 2

2

主要问题是OpenCV 不支持图像的透明度,而这是您以简单的方式完成该任务所需要的。

因此,一种方法是编写一个自定义函数/方法来迭代旋转的(源)图像,将像素复制到目标图像,同时忽略背景像素(例如特定的灰色阴影)。但是,这种方法非常有限。

编辑:

OpenGL 当然可以完成这项工作,但它带来了您可能不想知道的复杂性。幸运的是,还有其他替代方案,例如ImakeMagick ,它通过ImageMagick++提供 C++ API ,它当然可以处理透明图像。看看Magick++ 的简单介绍

Qt 中的QImage类可能也可以做到这一点。

于 2013-01-24T20:13:40.970 回答
2

我用 Qt 库和 OpenCV 解决了我的问题。

这里如何:

给定imageRR_image为了将前者复制到后者,我使用了以下代码:

QPainter painter(&RR_image);
painter.drawImage( (float)p1.x(),(float)p2.y(), image);

RR_imageimage必须是 QImage 对象,所以我必须使用以下代码将它们从 Mat 转换为 QImage:

cvtColor(image, image,CV_BGR2RGB);
QImage image= QImage((uchar*) image.data, image.cols, image.rows, image.step, QImage::Format_RGB888);

结果是: 在此处输入图像描述

希望这会对某人有所帮助!

于 2013-01-29T16:54:25.017 回答