将图像复制到旋转矩形opencv c++; 我使用WiN7x64,用OpenCV和Visual Studio 2010,用C++编程。 我想将一个图像(称为image)复制到另一个图像的矩形区域(称为RR\u image)。但是,该区域是旋转的

将图像复制到旋转矩形opencv c++; 我使用WiN7x64,用OpenCV和Visual Studio 2010,用C++编程。 我想将一个图像(称为image)复制到另一个图像的矩形区域(称为RR\u image)。但是,该区域是旋转的,c++,copy,rectangles,roi,C++,Copy,Rectangles,Roi,这是图像: 这里是RR\u图像: (如您所见,我已经旋转了第一个图像) 我将复制红色矩形中的第一个图像 有多少种方法可以做到这一点 我了解ROI和:img1.copyTo(img2.rowRange(…),img2.colRange(…) 谢谢 主要问题是,OpenCV不支持图像的透明度,而这正是轻松完成任务所需要的 因此,一种方法是编写一个自定义函数/方法来迭代旋转(源)图像,将像素复制到目标图像,同时忽略背景像素(例如,特定的灰度)。不过,这种方法非常有限 编辑: OpenGL当然可以完成

这是图像

这里是RR\u图像: (如您所见,我已经旋转了第一个图像)

我将复制红色矩形中的第一个图像

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

我了解ROI和:
img1.copyTo(img2.rowRange(…),img2.colRange(…)


谢谢

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

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

编辑:

OpenGL当然可以完成这项工作,但它带来了一种复杂性,你可能不想让你知道。幸运的是,还有其他的选择,比如,它提供了一个C++ API,它当然可以处理透明的图像。看一看


来自Qt的类也可以做到这一点。

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

如何:

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

QPainter painter(&RR_image);
painter.drawImage( (float)p1.x(),(float)p2.y(), image);
cvtColor(image, image,CV_BGR2RGB);
QImage image= QImage((uchar*) image.data, image.cols, image.rows, image.step, QImage::Format_RGB888);
RR_imageimage必须是一个QImage对象,因此我必须使用以下代码将它们从Mat转换为QImage:

QPainter painter(&RR_image);
painter.drawImage( (float)p1.x(),(float)p2.y(), image);
cvtColor(image, image,CV_BGR2RGB);
QImage image= QImage((uchar*) image.data, image.cols, image.rows, image.step, QImage::Format_RGB888);
结果是:


希望这能帮助别人

我在网上看到OpenCV不支持透明性。。太糟糕了!那么,我是否应该寻找其他库来将一个图像复制到另一个图像并具有透明度?喜欢OpenGL吗?谢谢你的回答!我将使用QT或ImakeMagick搜索解决方案!但是,假设我解决了透明度问题,那么我怎样才能将我的图像复制到红色矩形中呢?我不能使用Roi,对吗?你必须使用Qt或ImageMagick来进行复制,这就是重点。复制完成后,您可以将结果数据转换回
cv::Mat
。请参阅相关: