【问题标题】:ways of copying an image into a rotated rectangle opencv c++将图像复制到旋转矩形opencv c ++中的方法
【发布时间】:2013-01-30 00:54:25
【问题描述】:

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

这是图片

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

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

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

我知道 ROI 和:img1.copyTo(img2.rowRange(...), img2.colRange(...));

谢谢!

【问题讨论】:

标签: c++ copy rectangles roi


【解决方案1】:

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

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

编辑:

OpenGL 当然可以完成这项工作,但它带来了您可能不希望自己知道的复杂性。幸运的是,还有其他替代方案,例如ImakeMagick,它通过ImageMagick++ 提供了一个C++ API,它当然可以处理透明图像。看看A Gentle Introduction to Magick++

Qt 中的QImageprobably 也可以做到这一点。

【讨论】:

  • 我在互联网上读到 OpenCV 不支持透明度.. 太糟糕了!那么我应该寻找其他库将图像复制到另一个并具有透明度吗?像 OpenGL?
  • 感谢您的回答!我将使用 QT 或 ImakeMagick 搜索解决方案!但是,假设我解决了透明度问题,那么如何将我的图像复制到红色矩形中?我不能使用 Roi,对吧?
  • 您将不得不使用 Qt 或 ImageMagick 自己进行复制,这就是重点。复制完成后,您可以将结果数据转换回cv::Mat
【解决方案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);

结果是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-07
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多