在OpenCV2 - 计算机视觉应用程序编程书中给出的第一个OpenCV程序之后,按照设置QtCreator的所有步骤,我仍然无法按预期运行程序。
我正在使用Qt Creator 2.4.1(基于Qt 4.7.4(64位)),这就是我的.pro文件的样子 -
QT += core
QT -= gui
TARGET = myQtConsoleProject
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
INCLUDEPATH += /usr/local/include
LIBS += -L/usr/local/lib \
-lopencv_core \
-lopencv_highgui \
-lopencv_imgproc \
-lopencv_features2d \
-lopencv_calib3d
以下是该计划:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int main(int argc, char *argv[])
{
// read an image
//cv::Mat image = cv::imread("lena.jpg", 1);
IplImage* img = cvLoadImage("/home/icarus/Pictures/lena.jpg");
cv::Mat image(img);
cvReleaseImage(&img);
// create image window named "My Image"
cv::namedWindow("My Image");
// show image on window
cv::imshow("My Image", image);
// wait key for 5000ms
cv::waitKey(50000);
return 1;
}
代码显然没有编译错误或警告,但是点击QtCreator上的“运行”按钮(应该构建然后执行此应用程序),我得到的是一个标题为“qtcreator_process_stub”的终端窗口,显示:
按关闭此窗口...
然而,我期望的是一个OpenCV GUI窗口,显示标题为“我的图像”的lena.jpg。关于可能发生的事情的任何线索?
在QtCreator应用程序控制台上,我看到了这一点:
Starting /home/icarus/Work/MachineVision/Projects/myQtConsoleProject-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Release/myQtConsoleProject...
/home/icarus/Work/MachineVision/Projects/myQtConsoleProject-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Release/myQtConsoleProject exited with code 0
请注意,我确信我有一个很好的内置源OpenCV-2.3.1安装,通过运行一些示例应用程序进行测试。另外,我很确定.pro文件中指定的路径是正确的。
答案 0 :(得分:0)
我不知道这是否是您所看到的行为的正确原因,但我确实认为这是一个问题。
根据文件http://opencv.willowgarage.com/documentation/cpp/basic_structures.html (或者只是搜索它,以防链接失效)
您用于Mat的构造函数定义如下:
Mat::Mat(const IplImage* img, bool copyData=false)
您使用过:
cv::Mat image(img);
cvReleaseImage(&img);
由于默认情况下copyData为false,并且您没有传递'true'变量,这意味着Mat指的是与IplImage相同的内存。
现在你已经在显示它之前释放了IplImage(img)的内存。这是一个问题。
尝试添加
if(! image.data ) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl ;
return -1;
}
显示图像以验证此情况之前。