Я пытаюсь закончить программу сегментации GraphCut. Часть сегментации написана на openCV, а часть графического интерфейса — на Qt. Часть сегментации работает нормально. У меня проблема с их интеграцией, то есть я не могу использовать функцию каракули (одна функция в GraphCut) в графическом интерфейсе.
【Часть сегментации openCV】
Код каракули в названном окне openCV выглядит следующим образом (он работает)
Код: Выделить всё
namedWindow("Scribble");
Mat myImg = imread(imgFileName, CV_LOAD_IMAGE_COLOR);
imshow("Scribble", myImg);
setMouseCallback("Scribble", onMouse, 0);

【GUI-часть Qt】
Я создал пользовательский интерфейс, используя QtCreator. Пользовательский интерфейс выглядит следующим образом. Исходное изображение находится в QWidget::graphicsView. Чтобы показать это исходное изображение, я использовал следующий код (он тоже работает).

Мой код:
Код: Выделить всё
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();
Моя цель — сделать наброски в этом графическом интерфейсе (другими словами, объединить сегментацию OpenCV и графический интерфейс Qt), цель — что-то вроде следующего рисунка.

【Что я пробовал】
Основная проблема заключается в том, что последняя строка функции openCV setMouseCallback в 【части сегментации openCV】 принимает namedWindow openCV в качестве входных данных, а исходное изображение в 【части графического интерфейса Qt】 задано в Qt graphicsView.
Поэтому я подумал, что если я смогу преобразовать
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();
Встраивание окна OpenCV в графический интерфейс Qt
Подробнее здесь: https://stackoverflow.com/questions/571 ... cv-with-qt
Мобильная версия