获取在 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?