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
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);
or convert matrix pass
invert
correct typesobel(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
Post a Comment