我按照一个示例来使用GPU来操作和显示来自C ++ / OpenCV文件的图像(来自此处:http://on-demand.gputechconf.com/gtc/2013/webinar/opencv-gtc-express-shalini-gupta.pdf)。代码是:
#include <opencv2/opencv.hpp>
#include <opencv2/gpu/gpu.hpp>
#include <opencv2/gpu/gpumat.hpp>
using namespace cv;
int main()
{
Mat src = imread("car1080.jpg", 0);
if (!src.data) exit(1);
gpu::GpuMat d_src(src);
gpu::GpuMat d_dst;
gpu::bilateralFilter(d_src, gpu::Canny(d_dst, d_dst, 35, 200, 3);
Mat dst(d_dst);
imshow("out.png", dst);
return 0;
}
但是,我一直收到错误消息,指出d_dst
和gpu::GpuMat d_src(src)
部分未定义gpu::GpuMat d_dst
。根据我的阅读,这是因为我还没有包含文件,声明或其他内容。
下面列出了我的其他依赖项:
opencv_calib3d249d.lib
opencv_contrib249d.lib
opencv_core249d.lib
opencv_features2d249d.lib
opencv_flann249d.lib
opencv_gpu249d.lib
opencv_highgui249d.lib
opencv_imgproc249d.lib
opencv_legacy249d.lib
opencv_ml249d.lib
opencv_nonfree249d.lib
opencv_objdetect249d.lib
opencv_photo249d.lib
opencv_stitching249d.lib
opencv_superres249d.lib
opencv_ts249d.lib
opencv_video249d.lib
opencv_videostab249d.lib
我对这一切都不熟悉所以我不确定我是否错过了额外的依赖项,标题或需要使用Visual Studio 2012安装/配置某些GPU组件。
任何帮助将不胜感激!谢谢!
更新:以下是我的新代码编译正常;但是,即使imwrite
行替换为imshow
,也不会显示图像。 编辑我现在意识到我的代码在if (!src.data) exit(1);
行停止了,大概是因为图像文件没有被正确读取?
#include <stdio.h>
#include <direct.h>
#include "fstream"
#include "iostream"
#include <vector>
#include "opencv2/core/core.hpp"
#include "opencv2/core/gpumat.hpp"
#include "opencv2/core/opengl_interop.hpp"
#include "opencv2/gpu/gpu.hpp"
#include "opencv2/ml/ml.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/contrib/contrib.hpp"
#include "opencv2/video/tracking.hpp"
#include "opencv2/imgproc/imgproc.hpp"
int main(){
Mat src = imread("car.jpg", 0);
if (!src.data) exit(1);
gpu::GpuMat d_src(src);
gpu::GpuMat d_dst;
gpu::bilateralFilter(d_src, d_dst,15, 80,80);
Mat dst(d_dst);
imwrite("out.png", dst);
return 0;
}
注意 - 我可能并不需要所有#includes
但是哦。
答案 0 :(得分:3)
尝试包含core.hpp。就我而言,它位于opencv2 / core / core.hpp
中你必须修复对dualFilter(...)和Canny(...)的函数调用。参数号是错误的。
有点像这样:
int main(){
Mat src = imread("car.jpg", 0);
if (!src.data) exit(1);
gpu::GpuMat d_src(src);
gpu::GpuMat d_dst;
gpu::bilateralFilter(d_src, d_dst,15, 80,80);
Mat dst(d_dst);
imwrite("out.png", dst);
return 0;
}
您还没有提到有关您的开发环境的任何信息......(Win,Linux,Android,OpenCV版本)。
我在tegra板上工作,所以对我来说可能有点不同。我在我的开发环境中尝试了这个例子。它运作得很好。
很酷的胡!