【发布时间】:2014-06-26 01:49:47
【问题描述】:
当我尝试使用 GPU 进行卷积时出现此错误。
OpenCV 错误:cv::gpu::convolve 中的断言失败 (image.type() == CV_32F),文件 d:\opencv\sources\modules\gpu\src\imgproc.cpp,第 1413 行
我已将图像类型转换为 CV_32,但我遇到了这个问题。 我在使用 gpu::filter2D 时也遇到了类似的问题。
(我在 GPU 中使用 Sobel 或 Gaussianblur 没有问题。)
但是,当我主要这样做时:
int a=image.type(); a 的值为 21。不是 CV_32F。
请告诉我如何解决此问题!我真的需要你的帮助!!谢谢!!!
using namespace cv;
using namespace std;
int main()
{
// read kernel from text file
int kernel_size=15;
ifstream fin;
fin.open ("PSF00.txt");
float kernel0[15][15];
for (int i=0; i<kernel_size; i++)
{
for (int j=0; j<kernel_size; j++)
{
fin >> kernel0[i][j];
}
}
// Save 2D Kernel array into MAT format
Mat kernel = Mat(kernel_size, kernel_size, CV_32F, kernel0);
// load image
Mat image = imread("blurry_00.jpg");
image.convertTo(image, CV_32F);
// GPU
gpu::GpuMat gpu_input, gpu_input1, gpu_output, gpu_kernel;
gpu_input.upload(image);
gpu_kernel.upload(kernel);
gpu_input.convertTo(gpu_input1, CV_32F);
gpu::convolve(gpu_input1, gpu_kernel, gpu_output);
// Download image from GPU to CPU
Mat dst(gpu_output);
dst.convertTo(dst, CV_8U);
// Create a window for display.
namedWindow( "Display window (GPU)", WINDOW_AUTOSIZE );
imshow( "Display window (GPU)", dst );
waitKey(0);
return 0;
【问题讨论】: