【问题标题】:OpenCV, Qt, imread, namedWindow, imshow does not workOpenCV、Qt、imread、namedWindow、imshow 不工作
【发布时间】:2013-11-16 02:24:51
【问题描述】:

.pro 文件中:

QT       += core

QT       -= gui

TARGET    = latihan_2
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

INCLUDEPATH += E:\OpenCV\OpenCV\opencv\build\include

LIBS += E:\OpenCV\OpenCV\opencv\build\x86\mingw\lib\libopencv_core246.dll.a
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\mingw\lib\libopencv_highgui246.dll.a
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\mingw\lib\libopencv_imgproc246.dll.a
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\mingw\lib\libopencv_features2d246.dll.a
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\mingw\lib\libopencv_calib3d246.dll.a

main.cpp:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int main(){
    //read image
    Mat image = imread("img.jpg", 1);
    //create image window named "My image"
    namedWindow("My Image", CV_WINDOW_AUTOSIZE);
    //show the image on window
    imshow("My image", image);
    //wait key for 5000ms
    waitKey(5000);
    return 1;
    }

当我点击运行时,没有错误,但它只显示一个名为qtcreator_process_stub.exe的黑色窗口。

为什么“我的图片”窗口没有出现并显示 img.jpg? 我使用基于 Qt 5.1.1 的 Qt creator 2.8.1 和 openCV-2.4.6.0。

【问题讨论】:

  • 你在为 OpenCV 和 Qt 唱预建的二进制文件吗?
  • 是的,我使用 openCV 2.4.6
  • Qt 似乎没有与 OpenCV 正确链接。我建议您自己为 Qt 和 OpenCV 构建库。生成过程将确保所有内容都正确链接。
  • @Squirrelcages 查看所有答案,然后单击帮助您解决问题的答案旁边的复选框。通过这样做,您将帮助自己和未来的访客。

标签: image qt opencv imshow


【解决方案1】:

您还可以在 Qt 窗口上显示 cv::Mat 我将在 cvImage 上演示如何做到这一点。以下代码改编自cvImage::_open()

std::string filename = ...
cv::Mat mat = cv::imread(filename);

// Since OpenCV uses BGR order, we need to convert it to RGB
// NOTE: OpenCV 2.x uses CV_BGR2RGB, OpenCV 3.x uses cv::COLOR_BGR2RGB
cv::cvtColor(mat, mat, cv::COLOR_BGR2RGB) 

// image is created according to Mat dimensions
QImage image(mat.size().width, mat.size().height, QImage::Format_RGB888);

// Copy cv::Mat to QImage
memcpy(image.scanLine(0), mat.data, static_cast<size_t>(image.width() * image.height() * mat.channels()));

// Display the QImage in a QLabel
QLabel label;
label.setPixmap(QPixmap::fromImage(image));
label.show();

【讨论】:

    【解决方案2】:

    首先猜测是图片路径错误,所以首先测试应该是指定图片的完整路径。

    还要检查程序的返回值(确保它不返回一些崩溃错误代码 - 保持一致并返回 0 表示成功,其他值表示失败)。

    一点点编码告诉你代码失败的地方并没有什么坏处,所以检查 image.data 或者你也可以使用image.empty()

    if(! image.data )
    {
        std::cout << "No image to display";
        //can be any other method to display the error: qDebug, a messagebox... 
        //you can also 
        return 1;   
    }
    else
    {
        //use the image
        //if nothing goes wrong:
        //return 0; 
    }
    

    【讨论】:

    • +1 我认为如果未加载图像,imshow() 会崩溃,但您要指出的是一件重要的事情。
    • 我已经尝试了代码,但没有任何改变.. 仍然只显示名为 qtcreator_process_stub.exe 的窗口,并显示消息“Press to close this window...”
    • 如果您使用 Qt Creator,请检查 Application Output 以获取应用程序的返回码,如果您使用 gui,标准输出消息(cout 消息)也在其中应用程序。
    • 应用程序输出为:E:\OpenCV\Projects\myQtConsoleProject\build-latihan_2-Desktop_Qt_5_1_1_MinGW_32bit-Debug\debug\latihan_2.exe exited with code 0
    【解决方案3】:

    检查项目->运行设置->在终端中运行复选框。如果它被禁用,请启用它。

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,我通过修复路径环境变量解决了这个问题。在我的路径环境变量中,我错误地添加了一些opencv文件夹,然后我将它们删除并只添加了opencv DLL的bin文件夹,然后问题就解决了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-18
        • 2011-06-04
        • 2013-01-10
        • 1970-01-01
        相关资源
        最近更新 更多