CUDA图像处理



我在cuda文件中使用了openCV函数和变量。但是我得到了这些错误:

  1. 19智能提示:此声明没有存储类或类型说明符
  2. 没有重载函数"cudaMalloc"的实例匹配参数
  3. 6智能感知:期望一个';'
  4. 13智能感知:标识符"dim3"未定义

这是我的代码

#include <cxcore.h>
#include <highgui.h>
#include "opencv2/core/core.hpp"
#include <iostream>
#include "cuda.h" 
#include <tchar.h>
#include <cv.h>
using namespace cv;
using namespace std;
__global__ void kernel( void ) { 
}
int main( void ) 
{
Mat originalImage;     
originalImage = imread("C:\lena.bmp",CV_LOAD_IMAGE_GRAYSCALE);   

/// show original image
namedWindow("Original");
int x = 0; int y = 0;
moveWindow("Original",x,y);
imshow("Original", originalImage);
Mat dctImage = originalImage.clone();
dctImage.convertTo(dctImage,CV_32FC1, 1.0/255.0);
originalImage.convertTo(originalImage,CV_32FC1, 1.0/255.0);
Mat tmp1(512, 512, CV_32FC1);
resize(originalImage, originalImage, tmp1.size());
resize(dctImage, dctImage, tmp1.size());
cout<<dctImage.type()<<endl;
cout<<wmrk.size()<<endl;
////declare device variable    
float *dctImage_dev , *wmrk_dev;
dim3 blocks(64,64);
dim3 threads(8,8);
/////allocate memory on device
//cudaMalloc( (void**)dctImage_dev, dctImage.size() ) ;
/////launch kernel
kernel<<<1,1>>>();
printf( "Hello, World!n" );
cvWaitKey(80000);
return 0; 
}

我的第一个建议是将cuda代码移动到另一个文件中,这样您就有一个标准编译器来执行opencv +程序流程,并让cuda c++编译器执行实际的cuda代码,因为cuda c++不是c++ !你应该期望像gcc或msvc这样的标准编译器在非gpu模块中比cuda c++做得更好。有很多教程解释了如何为项目中的不同文件设置不同的编译器,包括nvidia的特定教程。

对于您遇到的特定错误,dctImage.size()返回Mat::Size类型的对象,该对象不能隐式地转换为size_t (size_t在此上下文中表示字节数)。下面的方法可以帮助您确定Mat的缓冲区大小,但是您可以在这里查找以下Mat成员:Mat::elemSize, Mat::step, Mat::step1(), Mat::cols,Mat::rows,Mat::channels()。当您熟悉了API后,这是一个微不足道的乘法任务。

相关内容

  • 没有找到相关文章

最新更新