我在Win7 x64上工作,使用openCV和Visual Studio 2010,用c ++编程。 我想将图像(称为图像)复制到另一个图像的矩形区域(称为 RR_image )。然而,这个区域是旋转的。
这里是图片:
这里是 RR_image : (如你所见,我已经旋转了第一张图片)
我会将第一张图片复制到红色矩形中。
有多少以及有哪些方法可以做到这一点?
我了解投资回报率并且:img1.copyTo(img2.rowRange(...), img2.colRange(...));
谢谢!
答案 0 :(得分:2)
主要问题是 OpenCV不支持图像中的透明度,这是您轻松完成该任务所需的。
因此,一种方法是编写一个自定义函数/方法来迭代将像素复制到目标图像的旋转(源)图像,同时忽略背景像素(例如,特定的灰色阴影) 。但这种方法非常有限。
修改强>
OpenGL当然可以完成这项工作,但它带来了一些你可能不想要的复杂性。幸运的是还有其他替代方法,如ImakeMagick,它通过ImageMagick++提供C ++ API,它当然可以处理透明图像。看看A Gentle Introduction to Magick++。
答案 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);
结果是:
希望这会对某人有所帮助!