Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [Solved with workaround] OpenCV 2.4.7 conflict with Qt 4.8.1 QImage

[Solved with workaround] OpenCV 2.4.7 conflict with Qt 4.8.1 QImage

Scheduled Pinned Locked Moved General and Desktop
5 Posts 2 Posters 2.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    Bullub
    wrote on last edited by
    #1

    I have started long time ago, a project with Qt4. Ubuntu 12.04, Qt 4.8, OpenCv 2.4.3, PCL 1.6. Developing all via Qt Creator 2.5.2. All in 64 bits version.

    I've just discovered a conflict between QImage and OpenCV.

    I din't faced this issue until now, due to the fact I was dealing with image files in disk via "cv::imread(filename)" and then transferring its data to QImage -> QPixmap -> QLabel. NO problem with that.

    Now, I need to load some images into Qt resource files. I created the proper .qrc via Qt Creator, and copied and registered image files in it. Well, If I try to load images from resources, it doesn't work:

    @QImage qi = QImage(":images/red.jpg");
    if (qi.isNull())
    {
    QMessageBox::warning(this,"hey","hey");
    }@

    Of course, at beginning I was struggling with resource names for an entire day. Until I decided to start other project, and copypasted the resource file, and the code that loads that QImage. In the test project, It works OK. (same computer, same IDE & Environment, but no OpenCV linking).
    Seeing this, I decided to try this piece of code:

    @QString fn = QFileDialog::getOpenFileName(this,"Load image");
    qi = QImage(fn);
    if (qi.isNull())
    {
    QMessageBox::warning(this,"hey","hey");
    }@

    In original code, this doesn't work! fn is loaded with right filename, but "qi = QImage(fn);" fails. In the Test program, this works as expected.

    This is a big problem, because I want to set some icons in windows, and some images for several widgets and QSplashScreen. It's not very acceptable to copy image files into generated binaries folders and load them, assuming user will do nothing with them...

    I must point again, that this is NOT a issue with Qt resource filename.

    Is there some workaround or idea about this?

    PD: I tried QPixmap(":images/red.jpg"); but program fails execution.

    PD: Some project settings:

    ResFiles.qrc:
    @<RCC>
    <qresource prefix="/">
    <file>images/red.png</file>
    </qresource>
    </RCC>@

    QOP.proj file:
    @#-------------------------------------------------

    Project created by QtCreator 2013-03-09T23:56:16

    #-------------------------------------------------

    QT += core gui

    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

    TARGET = QOP
    TEMPLATE = app

    SOURCES += main.cpp
    mainwindow.cpp
    [several files more...]

    HEADERS += mainwindow.h
    [several files more...]

    FORMS += mainwindow.ui
    camwindow.ui
    dialogsetupcam.ui
    dialogtestcam_sr4k.ui
    dialogtestcam_pmdnano.ui
    dialogcommand_pmdnano.ui
    dialogcreatecam.ui

    CONFIG += link_pkgconfig
    PKGCONFIG += opencv

    CONFIG += link_pkgconfig
    PKGCONFIG +=

    #Do not use this configuration to get PCL, some sublibraries aren't properly accesible, in example Visualizer
    #CONFIG += link_pkgconfig
    #PKGCONFIG += pcl_io-1.6

    #PCL Headers
    INCLUDEPATH += /usr/include/pcl-1.6
    /usr/include/flann/
    /usr/include/eigen3/
    /usr/include/openni/
    #PCL Libraries
    LIBS += -lpcl_common
    -lpcl_features
    -lpcl_filters
    -lpcl_geometry
    -lpcl_io
    -lpcl_kdtree
    -lpcl_keypoints
    -lpcl_octree
    -lpcl_registration
    -lpcl_sample_consensus
    -lpcl_search
    -lpcl_segmentation
    -lpcl_surface
    -lpcl_tracking
    -lpcl_visualization

    #VTK Headers
    INCLUDEPATH += /usr/include/vtk-5.8
    #VTK Libraries
    LIBS += -lQVTK
    -lvtkalglib
    -lvtkCharts
    -lvtkCommon
    -lvtkDICOMParser
    -lvtkexoIIc
    -lvtkFiltering
    -lvtkftgl
    -lvtkGenericFiltering
    -lvtkGeovis
    -lvtkGraphics
    -lvtkHybrid
    -lvtkImaging
    -lvtkInfovis
    -lvtkIO
    -lvtkmetaio
    -lvtkParallel
    -lvtkproj4
    -lvtkQtChart
    -lvtkRendering
    -lvtksys
    -lvtkverdict
    -lvtkViews
    -lvtkVolumeRendering
    -lvtkWidgets

    RESOURCES +=
    ResFiles.qrc

    OTHER_FILES +=
    images/red.png@

    A workaround I've thought is to load these images with some QFile class and "transfer" it to QImage. Can this be done?

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi,

      Aren't you just missing a / ?

      @QFile redImageFile(":/images/red.png");@

      or in your case:

      @QImage redImage(":/images/red.png");@

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • B Offline
        B Offline
        Bullub
        wrote on last edited by
        #3

        No. Any of both cases won't work for me.

        Note the QFileDialog::getOpenFileName code portion... In there, filename or filepath misspelling is not possible, and QImage continues failing.

        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #4

          Is the QImage null ? What format is it ?

          Also can you show the QLabel related code ?

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          0
          • B Offline
            B Offline
            Bullub
            wrote on last edited by
            #5

            I finally solved this question with this workaround:

            @//This WON'T WORK due to problems caused by presence of OpenCV library; it interferes with normal QImage loading from QResources
            /*
            QImage logoImage(":/images/Logo.png");
            */
            //Read file rawly into RAM (workaround to OpenCV/QImage issue)
            bool isImageInRAM = false;
            QFile file(":/images/Logo.png"); //Apparently there's no difference between ":/images/QOPLogo.png" and ":images/Logo.png"
            QByteArray rawImageFileInRAM;
            if (file.open(QIODevice::ReadOnly))
            {
            rawImageFileInRAM = file.readAll();
            file.close();
            isImageInRAM = true;
            }
            else
            checkFailed(0,QObject::tr("Error loading image from resource: %1").arg(QObject::tr("Logo"))); //checkFailed is a custom method that shows message errors

            //This WON'T WORK due to problems caused by presence of OpenCV library; it interferes with normal QImage loading from memory (yes, too U_U)
            /*
            QImage logoImage = QImage::fromData(rawImageFileInRAM);
            /
            std::vector<uchar> buffInRAM(rawImageFileInRAM.data(),rawImageFileInRAM.data()+rawImageFileInRAM.size());
            cv::Mat imgMatFromRAM = cv::imdecode(cv::Mat(buffInRAM),CV_LOAD_IMAGE_COLOR);
            cv::Mat cvRGBLogoImage(imgMatFromRAM.rows,imgMatFromRAM.cols,CV_8UC3);
            cv::cvtColor(imgMatFromRAM,cvRGBLogoImage,CV_BGR2RGB); //Convert BGR->RGB
            QImage logoImage((const unsigned char
            )cvRGBLogoImage.data,cvRGBLogoImage.cols,cvRGBLogoImage.rows,cvRGBLogoImage.step,QImage::Format_RGB888);

            //At this point logoImage already has image from resources ¡Yeaahhhh!!@

            1 Reply Last reply
            0

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved