openCV的namedWindow嵌入在Qt的QGraphicsScene中吗?使用Qt

时间:2019-07-24 07:58:29

标签: c++ qt opencv

【抽象】

我正在尝试完成GraphCut分割程序。细分部分是在 openCV 中编写的,而GUI部分是在 Qt 中编写的。细分部分效果很好。我在集成它们时遇到问题,即无法在GUI中使用涂鸦函数(GraphCut中的一个函数)。

【openCV的细分部分】

在openCV的namedWindow上涂抹的代码如下(有效)

namedWindow("Scribble");

Mat myImg = imread(imgFileName, CV_LOAD_IMAGE_COLOR);

imshow("Scribble", myImg);

setMouseCallback("Scribble", onMouse, 0);

在最后一行中,onMouse是用于对红线和蓝线进行划线的功能(请参见图片)

Original Image

【Qt的GUI部分】

我使用QtCreator创建了一个ui。用户界面如下图所示。原始图像位于QWidget :: graphicsView中。为了显示原始图像,我使用了以下代码(它也可以工作)。

program

我的代码:

Mat myImg = imread(imgFileName, CV_LOAD_IMAGE_COLOR);

QImage disImage = QImage((const unsigned char*)(myImg.data), myImg.cols, myImg.rows, QImage::Format_RGB888);

QGraphicsScene* scene = new QGraphicsScene;

scene->addPixmap(QPixmap::fromImage(disImage));

ui->graphicsView_OriginalImage->setScene(scene);

ui->graphicsView_OriginalImage->show();

【我的目标】

我的目标是在此GUI中涂抹文字(换句话说,组合openCV的细分和Qt的GUI),目标类似于下图

enter image description here

【我尝试过的东西】

主要问题是openCV的setMouseCallback函数在[openCV的细分部分]的最后一行以openCV的 namedWindow 作为输入,而在Qt的 graphicsView中给出了[Qt的GUI部分]中的原始图像。

所以我想如果我可以转换 openCV的 namedWindow 至 Qt的 graphicsView , 然后问题就解决了。

我在网上查找并尝试使用 cvGetWindowHandle ,但是它不起作用,(失败的代码如下)

QGraphicsScene* scene = new QGraphicsScene;

scene = (QGraphicsScene*)cvGetWindowHandle("Scribble");

scene->addWidget(ui->graphicsView_1, 0);

QImage disImage = QImage((const unsigned char*)(myImg.data), myImg.cols, myImg.rows, QImage::Format_RGB888);

scene->addPixmap(QPixmap::fromImage(disImage));

ui->graphicsView_1->setScene(scene);

ui->graphicsView_1->show();

我也阅读了以下帖子,但这似乎无法解决我的问题。

Embedding an OpenCV window into a Qt GUI

任何帮助都将得到感谢。提前感恩。

0 个答案:

没有答案