2013-09-05 43 views
0

我有想從簡歷::墊轉換爲GPU ::墊一個問題。我正在使用VS2012 Win7 x64。的OpenCV |墊到gpuMat在內存位置異常?

這是代碼:

#include "opencv2/imgproc/imgproc.hpp" 
#include <opencv2/opencv.hpp> 
#include "opencv2/highgui/highgui.hpp" 
#include <opencv2\gpu\gpu.hpp> 
#include "cv.h" 
#include "cxcore.h" 
#include <stdarg.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <iostream> 

using namespace cv; 
using namespace cv::gpu; 

int main() { 

Mat src = cv::imread("pic1.jpg"); 
gpu::GpuMat d_src, d_dst; 

d_src.upload(src); 

gpu::bilateralFilter(d_src,d_dst, -1, 50, 7); 
gpu::Canny(d_dst, d_dst, 35, 200, 3); 

Mat dst(d_dst); 
imwrite("out.jpg", dst); 
return 0; 
} 

我使用這麼多的包括,因爲在同一個文件我還有其他的功能聲明。

這是LIB文件我包括:

opencv_core246d.lib 
opencv_imgproc246d.lib 
opencv_highgui246d.lib 
opencv_ml246d.lib 
opencv_video246d.lib 
opencv_features2d246d.lib 
opencv_calib3d246d.lib 
opencv_objdetect246d.lib 
opencv_contrib246d.lib 
opencv_legacy246d.lib 
opencv_flann246d.lib 
opencv_nonfree246d.lib 
opencv_photo246d.lib 
opencv_stitching246d.lib 
opencv_superres246d.lib 
opencv_ts246d.lib 

這是我所得到的,當我嘗試編譯

First-chance exception at 0x000007FEFDD29E5D in CVtest.exe: Microsoft C++ exception:  cv::Exception at memory location 0x000000000025F8D0. 
First-chance exception at 0x000007FEFDD29E5D in CVtest.exe: Microsoft C++ exception: cv::Exception at memory location 0x000000000025F8D0. 
Unhandled exception at at 0x000007FEFDD29E5D in CVtest.exe: Microsoft C++ exception: cv::Exception at memory location 0x000000000025F8D0. 
The program '[6592] CVtest.exe' has exited with code -1073741510 (0xc000013a). 

這表明每當我試圖墊子和gpuMat之間切換。

如何可以解決這個問題?

+2

我在代碼中看到的第一個錯誤是,您使用下載方法,而不是上傳方法,以便從cpu內存複製圖像到設備內存 –

+0

是的你是對的,我忘了改變它。無論如何,上傳和下載導致相同的錯誤。 – illid44n

回答

1

我上傳時有同樣的問題/使用GPU模塊上的OpenCV與VS2010我的Windows計算機上下載。我用的是預編譯的二進制文件2.4.6,你可以下載在OpenCV的網站。

您需要確保CUDA + OpenGL的是你的卡上啓用了(假設你有一個支持CUDA GPU)。你需要做的第一件事是運行(或等價的,如果僅使用C):

cout << cv::getBuildInformation() << endl; 

這會告訴你,你已經在你的OpenCV構建啓用。這將打印大量的信息,但找地方打印「其他第三方庫」:

Other third-party libraries: 
    Use IPP:      NO 
    Use Eigen:     NO 
    Use TBB:      NO 
    Use OpenMP:     NO 
    Use GCD      NO 
    Use Concurrency    YES 
    Use C=:      NO 
    Use Cuda:     NO 
    Use OpenCL:     NO 

如果同時使用CUDA和/或使用OpenCL的說,沒有那麼每當你調用諸如GPU功能,你的程序會崩潰上傳和下載。

要解決它您需要編譯這些技術實現的OpenCV。對於Windows我遵循這個指南:

http://www.programmerfish.com/how-to-build-opencv-2-4-6-with-gpu-module-in-windows/#.UpuDQcRLNBm

編譯2.4.7版本的OpenGL和CUDA支持一切完美地爲我工作後。