Встроить в OpenCV NameWindow в QGraphicsScene Qt? программа openCV с QtC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Встроить в OpenCV NameWindow в QGraphicsScene Qt? программа openCV с Qt

Сообщение Anonymous »

【абстракция】
Я пытаюсь закончить программу сегментации GraphCut. Часть сегментации написана на openCV, а часть графического интерфейса — на Qt. Часть сегментации работает нормально. У меня проблема с их интеграцией, то есть я не могу использовать функцию каракули (одна функция в GraphCut) в графическом интерфейсе.
【Часть сегментации openCV】
Код каракули в названном окне openCV выглядит следующим образом (он работает)

Код: Выделить всё

namedWindow("Scribble");

Mat myImg = imread(imgFileName, CV_LOAD_IMAGE_COLOR);

imshow("Scribble", myImg);

setMouseCallback("Scribble", onMouse, 0);
в последней строке onMouse — это функция для рисования красных и синих линий (см. рисунок)
Изображение

【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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»