c++ - OpenCV error using inverse -


i'm working sift implementation using visual c++. code throws error while taking inverse:

/// load source image     src = imread("c:/users/adithyaanirudhha/documents/visual studio 2015/projects/consoleapplication2/pa.jpg", 1);  if (display_caption("original image") != 0) { return 0; }  dst = src.clone(); width = src.size().width; height = src.size().height; size size(height,width); if (display_dst(delay_caption) != 0) { return 0; } cvtcolor(src, src, cv_rgb2gray); /// applying gaussian blur   //for(int j=0;j<4;j++) //{ //resize(src, src, size / 2); k = 2 ^ (1 / 2); for(int i=0;i<3;i++) { //if (display_caption("gaussian blur") != 0) { return 0; } gaussianblur(src, dst, size(), 1.6*k, 1.6*k); if (display_dst(delay_blur*10) != 0) { return 0; } k = k * k; dst.copyto(dest[m]); //dest[m] = dst; m++; } //}  width2 = dog[1].size().width; height2 = dog[1].size().height; size sizes(width2,height2); mat dog_inv(sizes,0,cv_64f); (int n = 0; n < 2; n++) {     if(m1!=3 || m1 != 6 || m1 != 9)     subtract(dest[m1 + 1], dest[m1], dog[n],noarray(),-1); } (int = 0; < 2; i++) {     sobel(dog[i], grad_x, cv_16s, 1, 0, 3, 1, 0, border_default);     convertscaleabs(grad_x, grad_x);     transpose(grad_x, temp);     sobel(dog[i], grad_x_2, cv_16s, 2, 0, 3, 1, 0, border_default);     convertscaleabs(grad_x_2, grad_x_2);     c = invert(dog[i],dog_inv, decomp_lu);      sobel(dog[i], grad_x_2_1, cv_16s, 2, 0, 3, 1, 0, border_default);     convertscaleabs(grad_x_2_1, grad_x_2_1);     //imshow(window_name,src);     //grad_x_2_1 = grad_x_2_1.inv(cv_32f);     multiply(grad_x_2_1, grad_x, x_max, 1, 1);     multiply(temp, x_max, p1, 1, 1);     transpose(x_max,temp);     //multiply(temp, grad_x_2, p2, 1, 1);     multiply(p2, x_max, p2, 1, 1);     imshow(window_name, dog[1]);     /*for (int y = 0; y < dog[i].rows; y++)     {         (int x = 0; x < dog[i].cols; x++)         {             dog[i].at<vec3b>(y, x) = (-1 * (p1.at<vec3b>(y, x)) + 0.5*(p2.at<vec3b>(y, x)) + dog[i].at<vec3b>(y, x));         }     }*/     //imshow(window_name, dog[1]);     //imshow(window_name, src); 

and error is:

opencv error: assertion failed (type == cv_32f || type == cv_64f) in cv::invert, file c:\buildslave64\win64_amdocl\master_packslave-win64-vc14-shared\opencv\mod ules\core\src\lapack.cpp, line 798 press key continue . . .

opencv error: assertion failed (type == cv_32f || type == cv_64f) in cv::invert

means need pass invert matrix of type cv_32f (float) or cv_64f (double). you're passing cv_16s (short), because set when calling:

sobel(dog[i], grad_x, cv_16s, 1, 0, 3, 1, 0, border_default);                       ^^^^^^ 

so can

  1. change type of matrix returned sobel cv_32f

     sobel(dog[i], grad_x, cv_32f, 1, 0, 3, 1, 0, border_default);  c = invert(dog[i],dog_inv, decomp_lu); 
  2. or convert matrix pass invert correct type

     sobel(dog[i], grad_x, cv_16s, 1, 0, 3, 1, 0, border_default);  mat tmp;  dog[i].convertto(tmp, cv_32f);  c = invert(tmp,dog_inv, decomp_lu); 

Comments

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -