Ask Your Question

Run time error

asked 2013-06-23 07:47:02 -0600

residentelvio gravatar image

I have this error:

OpenCV Error: Assertion failed (type == B.type() && (type == CV_32FC1 || type == CV_64FC1 ||
type == CV_32FC2 || type == CV_64FC2)) in gemm, file /build/buildd/opencv-
2.3.1/modules/core/src/matmul.cpp, line 701 terminate called after throwing an instan
ce of 'cv::Exception' what(): /build/buildd/opencv-2.3.1/modules/core/
src/matmul.cpp:701: error: (-215) type == B.type() && (type == CV_32FC1 || 
type == CV_64FC1 || type == CV_32FC2 || type == CV_64FC2) in function gemm

I m sure is generated in a function I use because I used a print function after using that function. Originally what I have to do is translate to C with openCV this matlab's code:

function Xdecorr= color Decorrelation(X,numChannels)

if numChannels >1


I translated in C as:

  Mat colorDecorrelation(Mat img,int numColComp){

  Mat V,D,A,mu,Xdecorr,img_tr;
  SVD svd;


        A = img_tr*img;
        V = svd(A).u;
        Xdecorr = img*V;
   Xdecorr = img;

    return Xdecorr;

The error is for sure when I do : A=img_tr*img

edit retag flag offensive close merge delete


did you check the type() of img ? gemm wants float types

if img,type() is CV_8UC3, you'd need to img.convertTo(img_f,CV_32FC3); before the transpose

berak gravatar imageberak ( 2013-06-23 13:53:12 -0600 )edit

I have the same problem. When I open the img, his datas are:


For this I suppose the type is what you said. Before entrering the function i reshape it and I obtain r=314928 & c=1, fot this I use transpoce to obtain the covariance matrix.But now printing the img_tr datas are:

residentelvio gravatar imageresidentelvio ( 2013-06-24 07:39:43 -0600 )edit

yes. now what is your question there ?

does the matrix mul work now ?

berak gravatar imageberak ( 2013-06-24 09:04:05 -0600 )edit

IT doesn' t work, and running I have this message:

  OpenCV Error: Assertion failed (type == B.type() && (type == CV_32FC1 || type == CV_64FC1 ||

type == CV_32FC2 || type == CV_64FC2)) in gemm, file /build/buildd/opencv- 2.3.1/modules/core/src/matmul.cpp, line 701 terminate called after throwing an instan ce of 'cv::Exception

residentelvio gravatar imageresidentelvio ( 2013-06-24 09:38:55 -0600 )edit

ouch, sorry , i did not read properly.

the error states, that it wants 1 (or 2) channel matrices for multiplication, 3 channels won't work

also found a little bug in your code: mean() returns a Scalar, not a Mat. please change that( the Mat is just invalid in that case, and subtract will ignore it)

berak gravatar imageberak ( 2013-06-24 10:12:03 -0600 )edit

1 answer

Sort by ยป oldest newest most voted

answered 2013-06-24 10:16:05 -0600

berak gravatar image

updated 2013-06-24 11:01:20 -0600

ahh, remember the strange find, that the matlab code was making a 3 row, 1 channel img of it ? seems, you got to do the same here.

below code compiles and runs, but no idea, if the outcome is the right thing

Mat colorDecorrelation(Mat img,int numColComp)
    Mat imgf;
    Mat V,D,A,Xdecorr,img_tr;
    SVD svd;
    Scalar mu;
        imgf = imgf.reshape(1,img.rows*img.cols); // r=3,c=314928,chan=1

        A = img_tr*imgf;
        V = svd(A).u;
        Xdecorr = imgf*V;
        Xdecorr = Xdecorr.reshape(3,img.rows); // back to original shape
        // do we need to convert back to CV_8UC3 ?
        Xdecorr = img;

    return Xdecorr;

int main(int argc, char **argv)

    Mat img = imread("herring.jpeg");
    Mat r = colorDecorrelation(img,3);
    return 0;

before after

edit flag offensive delete link more


Now running it goes out from the function. A :


I dont know how is the relationship between type and depth. does exist some datasheet explaining it? Well, I tried to print Xdecorr opening a window with namedWindow,imshow,waitKey and destroyWindow to understand if does what I want (Decorrelation of the image about RGB components obtening the 3 components without color relatives to r,g,b components). But I have this error:

residentelvio gravatar imageresidentelvio ( 2013-06-24 10:54:06 -0600 )edit
      The program 'Image Display' received an X Window System error.
      This probably reflects a bug in the program.
      The error was 'BadAlloc (insufficient resources for operation)'.
     (Details: serial 361 error_code 11 request_code 53 minor_code 0)
     (Note to programmers: normally, X errors are reported asynchronously;
      that is, you will receive the error a while after causing it.
      To debug your program, run it with the --sync command line
      option to change this behavior. You can then get a meaningful
      backtrace from your debugger if you break on the gdk_x_error() function.)

Thanks helping me!

residentelvio gravatar imageresidentelvio ( 2013-06-24 10:55:27 -0600 )edit

Ok thanks, when I printed in the main it worked, just I converted in the main!

residentelvio gravatar imageresidentelvio ( 2013-06-24 11:23:52 -0600 )edit

what a story ... ;)

berak gravatar imageberak ( 2013-06-24 11:34:56 -0600 )edit

Hi man, I have the same error in another function, I mean the first one but in dft function,not gemm:

  Mat FourierTrasform2D(Mat img, double Lambda_max,Mat imfft,int *padSize,int *sz2filt_r,int *sz2filt_c){
   int padding; Mat pad;
  *padSize = roundIt(Lambda_max/2); padding = *padSize; 
  Mat padded(img.rows + padding2,img.cols + padding2,img.depth());                  
   *sz2filt_r=padded.rows; *sz2filt_c=padded.cols;
   return imfft; }

Till using dft function it works!

residentelvio gravatar imageresidentelvio ( 2013-06-24 12:42:16 -0600 )edit

didn't check this time, but for sure you want: Mat padded(img.rows + padding2,img.cols + padding2,img.type()); // instead of depth

berak gravatar imageberak ( 2013-06-24 12:49:01 -0600 )edit

I don' t know why but using depth or type I have same output image. The error was in reshape (using img.rows and not pad.rows). Now the code goes out from the function. In main I have


Datas of imfft2:


If I reshape as

   imfft2= imfft2.reshape(numColComp,img.rows);

I have an error at runtime for bad arguments in reshape.I suppose it is when I pass to CV_32FC3 with a picture padded and after using the dft (because it cutoff part of image) For this reason I have to pad.So the error must be when I reshape after converting because of pad

residentelvio gravatar imageresidentelvio ( 2013-06-24 13:25:56 -0600 )edit

Using the

    pad=pad.reshape(1,img.rows); // and not (1,img.rows*img.cols)

When I return in the main the imfft2 has the same datas of initial picture

residentelvio gravatar imageresidentelvio ( 2013-06-24 14:16:27 -0600 )edit

Question Tools


Asked: 2013-06-23 07:47:02 -0600

Seen: 7,335 times

Last updated: Jun 24 '13