繁体   English   中英

OpenCV,Qt,imread,namedWindow,imshow不起作用

[英]OpenCV, Qt, imread, namedWindow, imshow does not work

.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。

您还可以在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();

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

还要检查程序的返回值(确保它没有返回一些崩溃错误代码 - 保持一致并返回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; 
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM