使用GPU(C ++ / OpenCV)从文件显示图像

时间:2015-07-24 02:16:26

标签: c++ opencv image-processing cuda gpu

我按照一个示例来使用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_dstgpu::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但是哦。

1 个答案:

答案 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板上工作,所以对我来说可能有点不同。我在我的开发环境中尝试了这个例子。它运作得很好。

enter image description here

enter image description here

很酷的胡!