当我尝试使用GPU进行卷积时,我遇到了这个错误。
OpenCV错误:断言失败(image.type()== CV_32F)在cv :: gpu :: convolve中,文件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;
答案 0 :(得分:0)
我认为你已经得到了答案,实际上21是CV_32F。
#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT))
#define CV_8S 1 //depth
#define CV_32F 5 //cn
#define CV_MAT_DEPTH(flags) ((flags) & CV_MAT_DEPTH_MASK)
0x21 -> cn = 5, depth = 1