Конвертировать IplImage в Qpixmap
Как мы конвертируем IplImage
к QPixmap
или же QImage
?
Если единственный ответ - сохранить Iplimage
затем загрузите его в QPixmap
тогда как нам это сделать?
4 ответа
Решение
IplImage * ImageToIplImage(QPixmap * qPix){
int width = (qPix->toImage()).width();
int height =(qPix->toImage()).height();
// Creates a iplImage with 3 channels
IplImage *img = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);
for(int y=0;y<height;y++)
{
for(int x=0;x<width;x++ )
{
QRgb color = qPix->toImage().pixel(x,y);
cvSet2D(img,y,x,cvScalar(qBlue(color),qGreen(color),qRed(color),1));
}
}
return img; }
это сработало!! благодаря Фатеху Бенмерзоугу
Я только что нашел интересный кусок кода здесь, который предоставляет функцию для преобразования из IplImage*
в QImage*
, Поиск функции с именемIplImageToQImage()
,
Чтобы использовать эту функцию, вы можете сделать:
IplImage* cv_img = cvLoadImage("filename.jpg", CV_LOAD_IMAGE_UNCHANGED);
if(!cv_img)
{
std::cout << "ERROR: cvLoadImage failed" << std::endl;
exit(0);
}
uchar* data = NULL;
QImage* qt_img = IplImageToQImage(cv_img, &data, 0.0, 0.0);
if(!qt_img)
{
std::cout << "ERROR: IplImageToQImage failed" << std::endl;
exit(0);
}
qt_img->save("qimage_output.jpg");
delete qt_img;
Почему бы просто не использовать это:
QImage qt_img = ( QImage ( cv_img->dataIm, cv_img->width, cv_img->height, cv_img->QImage::Format_RGB888 ) ).rgbSwapped();
Сохранение его в файл и последующее использование QImage для его извлечения - это способ сделать это:
// On my system this code can be compiled with:
// g++ qimage_test.cpp -o qimage_test -I/usr/include/qt4 -lQtGui `pkg-config --cflags --libs opencv`
#include <qt4/QtGui/qpainter.h>
#include <highgui.h>
#include <cv.h>
#include <iostream>
int main()
{
IplImage* cv_img = cvLoadImage("coins.jpg", CV_LOAD_IMAGE_UNCHANGED);
if(!cv_img)
{
std::cout << "ERROR: cvLoadImage failed" << std::endl;
return -1;
}
// Process cv_img and then save it on a file on the disk
if (!cvSaveImage("cv_out.jpg", cv_img))
{
std::cout << "ERROR: cvSaveImage failed" << std::endl;
return -1;
}
// Loading OpenCV saved image into QImage
QImage::QImage qt_img("cv_out.jpg");
// Then finally display it, or do something with it.
// Saving it to the disk for testing purposes
qt_img.save("qt_img.jpg");
return 0;
}