将图像复制到旋转的矩形的方法opencv c ++

时间:2013-01-24 19:22:45

标签: c++ copy rectangles roi

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

这里是图片

enter image description here

这里是 RR_image enter image description here (如你所见,我已经旋转了第一张图片)

我会将第一张图片复制到红色矩形中。

有多少以及有哪些方法可以做到这一点?

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

谢谢!

2 个答案:

答案 0 :(得分:2)

主要问题是 OpenCV不支持图像中的透明度,这是您轻松完成该任务所需的。

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

修改

OpenGL当然可以完成这项工作,但它带来了一些你可能不想要的复杂性。幸运的是还有其他替代方法,如ImakeMagick,它通过ImageMagick++提供C ++ API,它当然可以处理透明图像。看看A Gentle Introduction to Magick++

来自Qt的QImage课程probably也可以这样做。

答案 1 :(得分:2)

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

这里如何:

鉴于图片 RR_image 以便将前者复制到后者中,我使用了以下代码:

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

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

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

结果是: enter image description here

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