Hi everyone: I am a newbie to OpenCV and try to duplicate the work from matlab to C++. Here is my C++ code below
int main(int argc, char const *argv[])
{
//import image
Mat_<double> img1, img2, img3;
img1 = imread("S1.jpg", IMREAD_GRAYSCALE);
img2 = imread("S2.jpg", IMREAD_GRAYSCALE);
img3 = imread("S3.jpg", IMREAD_GRAYSCALE);
//Push all the image it to one vector for SVDecomp
Mat_<double> svd_use;
svd_use.push_back(img1.reshape(0,1));
svd_use.push_back(img2.reshape(0,1));
svd_use.push_back(img3.reshape(0,1));
Mat_<double> source, trans, B, W, U, VT,U;
trans = svd_use.t();
source = svd_use*trans;
SVDecomp(source, W, U, VT);
//To make sure the value is the same as matlab
W = (Mat_<double>(3,3) << W[0][0], 0, 0, 0, W[1][0], 0, 0, 0,W[2][0]);
U = (Mat_<double>(3,3) << -U[0][0], -U[0][1], U[0][2] , -U[1][0], -U[1][1], U[1][2], -U[2][0], -U[2][1], U[2][2]);
B = trans*U//<---this part cause the Segmentation fault: 11
return 0;
}
source_img1 = rgb2gray(imread('S1.JPG')); source_img2 = rgb2gray(imread('S2.JPG')); source_img3 = rgb2gray(imread('S3.JPG'));
%Vectorize images img_vector1 = source_img1(:); img_vector2 = source_img2(:); img_vector3 = source_img3(:);
%Calculate SVD t = double([img_vector1'; img_vector2'; img_vector3']); [U,S,V] = svd(tt'); B = t'V*S^(-1/2); Here is my matlab code
}
Could someone know how to solve this situation? Thanks!! The size of trans is 3 * 16032768 (row* col) and U is 3*3, so I am pretty sure that can be multiply.