我自己用VS 2013构建了OpenCV 3.0.0。
我将fastNlMeansDenoising(CPU版本和CUDA版本)应用于具有相同参数的同一图像, 但结果是不同的!!
发生了什么?
我猜原因是CPU和GPU的精度不同。
#include <string>
#include <opencv2/core/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/photo/cuda.hpp>
#include <opencv2/photo.hpp>
using namespace std;
using namespace cv;
int main(){
string imageName("input.bmp");
//CPU version
Mat image = imread(imageName.c_str(), IMREAD_GRAYSCALE);
Mat reslutCPU;
fastNlMeansDenoising(image, reslutCPU, 2.5, 7, 31);
imwrite("cpu.bmp", reslutCPU);
//CUDA version
cuda::GpuMat imageGPU;
cuda::GpuMat reslutGPU;
Mat buff;
imageGPU.upload(image);
cuda::fastNlMeansDenoising(imageGPU, reslutGPU, 2.5, 7, 31);
reslutGPU.download(buff);
imwrite("gpu.bmp", buff);
return 0;
}