3

またはにどのように変換IplImageしますQPixmapQImage?

唯一の答えが保存してIplimageにロードすることであるQPixmap場合、どうすればよいでしょうか?

4

4 に答える 4

2

からに変換する関数を提供する興味深いコードをここで見つけました。という名前の関数を検索します。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;
于 2011-06-23T02:42:51.657 に答える
1

それをファイルに保存し、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;
}
于 2011-06-23T02:24:08.110 に答える
1

なぜこれを使用しないのですか:

QImage qt_img = ( QImage ( cv_img->dataIm, cv_img->width, cv_img->height, cv_img->QImage::Format_RGB888 ) ).rgbSwapped();
于 2012-06-07T08:53:46.157 に答える
0
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; }

出来た !!Fateh benmerzougのおかげで

于 2011-06-23T14:13:49.050 に答える