I'm using Scilab API list function to access 2D/3D matrices from Scilab environment in the C++ code. This list is then converted into a Mat object and passed to OpenCV.
I'm having trouble accessing the child elements of the list. int retrieveImage(Mat &image,int pos) { SciErr sciErr; int iRows=0,iCols=0,i,j,k=0; int *piAddr = NULL; int *piAddrChild = NULL; int iPrec = 0,iItem = 0; //retrieving number of items in the list and type of data(integer/float) sciErr = getVarAddressFromPosition(pvApiCtx,pos,&piAddr); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } sciErr = getListItemAddress(pvApiCtx,piAddr,1,&piAddrChild); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } sciErr = getListItemNumber(pvApiCtx,piAddr,&iItem); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } if(isIntegerType(pvApiCtx, piAddrChild)) { // Retrieve 2D/3D matrices of int type } else //for floating point/ double precision values { if(iItem==3) { double *pstDataR = NULL; double *pstDataG = NULL; double *pstDataB = NULL; sciErr = getVarAddressFromPosition(pvApiCtx,pos,&piAddr); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } //retrive the matrix of the R values sciErr = getMatrixOfDoubleInList(pvApiCtx, piAddr, 1, &iRows, &iCols, &pstDataR); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } //retrive address of the list sciErr = getVarAddressFromPosition(pvApiCtx,pos,&piAddr); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } //retrive the matrix of the G values sciErr = getMatrixOfDoubleInList(pvApiCtx, piAddr, 2, &iRows, &iCols, &pstDataG); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } //retrive address of the list sciErr = getVarAddressFromPosition(pvApiCtx,pos,&piAddr); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } //retrive the matrix of the B values sciErr = getMatrixOfDoubleInList(pvApiCtx, piAddr, 3, &iRows, &iCols, &pstDataB); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } //creating an image matrix with the no. of rows and columns we retrieved, and assigning it to be of the form 8-bit unsinged integers image = Mat(iRows,iCols,CV_64FC3); //Now that we have the 3 matrices(R,G,B), we need to assign those values to the pixels. The following code does this k=0; for(i=0;i<iRows;i++) { for(j=0;j<iCols;j++) { image.at<Vec3d>(i,j)[2]=pstDataR[i+iRows*j]; image.at<Vec3d>(i,j)[1]=pstDataG[i+iRows*j]; image.at<Vec3d>(i,j)[0]=pstDataB[i+iRows*j]; } } } else { // Grayscale images double *pstDataR = NULL; sciErr = getVarAddressFromPosition(pvApiCtx,pos,&piAddr); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } //retrive one 2D matrix of image sciErr = getMatrixOfDoubleInList(pvApiCtx, piAddr, 1, &iRows, &iCols, &pstDataR); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } image = Mat(iRows,iCols,CV_64FC1); //Assigning image matrix values to pixels k=0; for(i=0;i<iRows;i++) for(j=0;j<iCols;j++) image.at<double>(i,j)=pstDataR[i+iRows*j]; } } return 1; } When I use this function, I get the error- API Error: in getMatrixOfDoubleInList: Unable to get address of item #2 in argument #1 in getMatrixOfDouble: Invalid argument type, double matrix expected What is wrong with the code? Shamika
_______________________________________________ users mailing list users@lists.scilab.org http://lists.scilab.org/mailman/listinfo/users