如何将使用 Qt Paint Application 绘制的图像传输到 Mat openCV

Posted

技术标签:

【中文标题】如何将使用 Qt Paint Application 绘制的图像传输到 Mat openCV【英文标题】:How to transfer the image drawn using Qt Paint Application to Mat openCV 【发布时间】:2014-09-27 14:49:26 【问题描述】:

我使用 Qt 创建了一个绘图应用程序。现在,无论我画什么,我都需要处理图像。因此,我想将绘制的图像传输到 openCV 中的 Mat。我该怎么做?

【问题讨论】:

***.com/questions/11886123/… 【参考方案1】:

我写了代码 sn-p 用于将屏幕截图转移到cv::Mat,但我希望你理解主要思想,你应该进行哪个对话。

    QPixmap win = QPixmap::grabWindow(QApplication::desktop()->winId());
    QImage scr = win.toImage().scaled(640,480);
    QImage screen = scr.convertToFormat(QImage::Format_RGB888);
    cv::Mat tmp(screen.height(),screen.width(),CV_8UC3,(uchar*)screen.bits(),screen.bytesPerLine());
    cvtColor(tmp, tmp,CV_BGR2RGB);

现在cv::Mat 包含这张图片。

例子:

QPixmap okno = QPixmap::grabWindow(QApplication::desktop()->winId());
QImage scr = okno.toImage().scaled(640,480);
QImage screen = scr.convertToFormat(QImage::Format_RGB888);
cv::Mat tmp(screen.height(),screen.width(),CV_8UC3,(uchar*)screen.bits(),screen.bytesPerLine());
cvtColor(tmp, tmp,CV_BGR2RGB);
cv::namedWindow("d");
cv::imshow("d",tmp);

imshow 正确显示cv::Mat

【讨论】:

出现错误,未定义对cv::fastFree(void*)', undefined reference to cv::Mat::deallocate()'的引用 @user3747190 我的示例代码没有问题,您的项目有问题,谷歌给出的所有链接都表示链接库有问题。

以上是关于如何将使用 Qt Paint Application 绘制的图像传输到 Mat openCV的主要内容,如果未能解决你的问题,请参考以下文章

QT的Paint 系统

如何检测鼠标点击在pyside中绘制的椭圆?

Qt。如果我在 QStyledItemDelegate 中定义了 paint() 方法,则方法 displayText() 不起作用

Qt的paint函数重写,以及QPaint给一条线绘制箭头

Qt QTableView paint() 事件无限期交付,消耗 1 个 CPU 内核的 100%

QWidget 之paint部分杂记(从Qt4.0到4.8的进化,在Qt 4.4中,Alien Widget诞生了)