Перейти к содержимому
Compvision.ru
kudukSweetone

OpenCV и QT проблема с IplImage

Recommended Posts

Братцы, кто QT занимался дайте совет дельный что делать.

Вот у меня имеется листинг рабочий который ищет окружности на изображении. Проблемка вырисовывается в том, что в программке используется IplImage а в QT свой формат для изображений. Подскажите может сталкивался кто, как сделать чтобы результаты моей проги отображались в Qtшных Textlabel или frame. То есть как перегнать из iplimage в понятный QT формат?

Интерфейс я QT Designer накидал, а вот вся обработка изображений на OpenCVшных функциях, неувязачка.

Может есть у кого хотя бы проектик небольшой - чтобы по нажатию кнопки открывалось изображение iplimage и в textlabel загружалось? Буду знать хоть от чего плясать.

Circle.txt

post-1679-0-20422400-1346933388_thumb.jp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Надеюсь этот кусочек поможет :)

#include "simpleqtapp.h"
#include "opencv2/core/core.hpp"
#include "opencv2/core/gpumat.hpp"
#include "opencv2/core/opengl_interop.hpp"
#include "opencv2/gpu/gpu.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/contrib/contrib.hpp"
#include "opencv2/video/tracking.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace std;
using namespace cv;
#include <QLabel>
#include <QFileDialog>
QImage Mat2QImage(const cv::Mat3b &src)
{
QImage dest(src.cols, src.rows, QImage::Format_ARGB32);
for (int y = 0; y < src.rows; ++y)
{
const cv::Vec3b *srcrow = src[y];
QRgb *destrow = (QRgb*)dest.scanLine(y);
for (int x = 0; x < src.cols; ++x)
{
destrow[x] = qRgba(srcrow[x][2], srcrow[x][1], srcrow[x][0], 255);
}
}
return dest;
}

QImage Mat2QImage(const cv::Mat_<double> &src)
{
double scale = 255.0;
QImage dest(src.cols, src.rows, QImage::Format_ARGB32);
for (int y = 0; y < src.rows; ++y)
{
const double *srcrow = src[y];
QRgb *destrow = (QRgb*)dest.scanLine(y);
for (int x = 0; x < src.cols; ++x)
{
unsigned int color = srcrow[x] * scale;
destrow[x] = qRgba(color, color, color, 255);
}
}
return dest;
}

SimpleQTApp::SimpleQTApp(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
setupUi(this);
QObject::connect(quitButton, SIGNAL(clicked()), this, SLOT(OnBtnClk()));
}

SimpleQTApp::~SimpleQTApp()
{

}
void SimpleQTApp::OnBtnClk(void)
{
QString fileName = QFileDialog::getOpenFileName(this, QString::fromWCharArray(L"Открыть файл"));

if (fileName != "")
{
Mat img=imread(fileName.toStdString(),1);
QImage i=Mat2QImage((Mat3b)img);
QPixmap pm = QPixmap::fromImage(i);
MyLabel->setScaledContents(true);
MyLabel->setPixmap(pm);
}
}
[/code]

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Smorodov можете посмотреть мой проект из вашего кода (в прикрепленном), с MyLabel чего-то я напутал - не запускается.

SimpleQTApp.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не это у меня сейчас не соберется, я opencv без поддержки Qt собирал.

Что сразу видно, так это MyLabel надо на label поменять, у Вас ведь имя метки которая стоит на форме - label.

UPD: точнее openCV у меня x64, а Qt x32, это совсем не нравится линковщику.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вставьте вместо своего вот это:

ui.Mylabel->setScaledContents(true);

ui.Mylabel->setPixmap(pm);

все заработает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×