获取在 Qt5 中工作的 opencv_gpu 函数

Posted

技术标签:

【中文标题】获取在 Qt5 中工作的 opencv_gpu 函数【英文标题】:Get a opencv_gpu function working in Qt5 【发布时间】:2015-10-16 12:50:43 【问题描述】:

我有一个安装了 Qt5 和 OpenCV 的 OpenSUSE 13.2 系统,并安装了 cudasupport。硬件是带有集成英特尔 gpu 芯片和 NVidia GForce 940 M 的英特尔 i5 处理器,我试图编译这个文件。

#include <iostream>
#include <time.h>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/opencv.hpp"
#include "opencv2/gpu/gpu.hpp"

using namespace std;

int main()

    try
    
        cv::Mat dst_mat;
        cv::Mat src_host = cv::imread("/home/peter/testCuda/testCuda/GothaOrangerie.JPG", CV_LOAD_IMAGE_GRAYSCALE);
        cv::namedWindow("Result",cv::WINDOW_NORMAL);
        cv::imshow("Result", src_host);
        cv::waitKey();
        cv::gpu::GpuMat dst, src;
        src.upload(src_host);
        clock_t t = clock();
        cv::gpu::threshold(src, dst, 128.0, 255.0, CV_THRESH_BINARY);
        t = clock() -t;
        cv::Mat result_host(dst);

        cout << ((float)t)/CLOCKS_PER_SEC << endl;
        cv::imshow("Result", result_host);
        cv::waitKey();

        t = clock();
        cv::threshold(src_host, dst_mat, 128.0, 255.0, CV_THRESH_BINARY);
        t = clock() -t;
        cout << ((float)t)/CLOCKS_PER_SEC << endl;
        cv::imshow("Result", dst_mat);
        cv::waitKey();
    
    catch(const cv::Exception& ex)
    
        cout << "Error: " << ex.what() << endl;
    
    return 0;
   

在shell中编译

g++ main.cpp -o threshold `pkg-config --cflags --libs opencv` -lopencv_gpu -L/usr/local/cuda-7.5/lib64  

效果很好,我可以毫无问题地运行这个小程序。如果我使用 Qt5 IDE 尝试它,它会返回此错误。

OpenCV Error: No GPU support (The library is compiled without CUDA     support) in mallocPitch, file /home/abuild/rpmbuild/BUILD/opencv-2.4.9/modules/dynamicuda/include/opencv2/dynamicuda/dynamicuda.hpp, line 126
Error: /home/abuild/rpmbuild/BUILD/opencv-2.4.9/modules/dynamicuda/include/opencv2/dynamicuda/dynamicuda.hpp:126: error: (-216) The library is compiled without CUDA support in function mallocPitch    

如果我用这个命令运行 shellcompiled 程序

optirun ./threshold 

我得到同样的错误。

.pro 文件是

#-------------------------------------------------
#
# Project created by QtCreator 2015-10-15T04:02:07
#
#-------------------------------------------------



TARGET = testCuda

LIBS += -L/usr/lib64/
LIBS += -L/usr/local/cuda-7.5/lib64 -lopencv_gpu
LIBS += `pkg-config opencv --cflags --libs`

SOURCES += main.cpp 

而Qt的编译命令是

22:58:12: Running steps for project testCuda...
22:58:12: Configuration unchanged, skipping qmake step.
22:58:12: Starting: "/usr/bin/make"
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I../testCuda -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include -I. -I../testCuda -I. -o main.o ../testCuda/main.cpp
g++ -Wl,-O1 -o testCuda main.o    -L/usr/lib64 -L/usr/lib64/ -L/usr/local/cuda-7.5/lib64 -lopencv_gpu `pkg-config opencv --cflags --libs` -lQtGui -L/usr/lib64 -L/usr/X11R6/lib -lQtCore -lpthread
22:58:13: The process "/usr/bin/make" exited normally.
22:58:13: Elapsed time: 00:01.  

有人知道如何解决这个问题吗?

【问题讨论】:

所以你可以使用 QtCreator 和在 shell 中编译,你得到的错误是运行时错误? 是的,完全正确。抱歉没有提到它。 【参考方案1】:

卸载预装的 libopencv-2.4.9 包解决了它。

【讨论】:

以上是关于获取在 Qt5 中工作的 opencv_gpu 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone 模拟器中工作的 UIAutomation 中获取 captureScreenWithName?

无法获取在GLSL 1.5中工作的整数顶点属性

$ 究竟是如何在 NASM 中工作的?

在最新版本的 Bootstrap 中工作的下拉菜单? [复制]

创建在 IE 中工作的文件上传

关于管道如何在 Bash 中工作的简单解释是啥?