Мне нужно деформировать изображение с помощью аффинного преобразования. Ошибка, которую я получаю, заключается в том, что «код разбился».
Может кто-нибудь сказать мне, что не так с моим кодом?
Mat imgAffine, image, par;
image = imread("/media/sf_vbox_share/ubuntushare/board.jpg",1);
par.at<double>(0,0)= 1.01121; //p1
par.at<double>(1,0)= 0.21067; //p2;
par.at<double>(0,1)= -89.69693; //p3;
par.at<double>(1,1)= - 0.11557; //p4;
par.at<double>(0,2)= 1.44982; //p5;
par.at<double>(1,2)= -193.66149;//p6;
imgAffine = Mat::zeros(image.rows, image.cols, image.type());
warpAffine(image,imgAffine,par, image.size(),INTER_LINEAR);
namedWindow("image",WINDOW_AUTOSIZE);
imshow("image",imgAffine);
cvWaitKey(0);
par
имеет неопределенный размер, поэтому при попытке записи в него элементов он, скорее всего, приведет к ошибкам сегментации. Попробуйте выделить память для него перед установкой его элементов:
// Your code
Mat imgAffine, image, par;
image = imread ("/media/sf_vbox_share/ubuntushare/board.jpg",1);
// New code
par = Mat(2, 3, CV_64FC1); // Allocate memory
// Rest of your code
par.at<double>(0,0)= 1.01121; //p1
par.at<double>(1,0)= 0.21067 ; //p2;
par.at<double>(0,1)= -89.69693; //p3;
par.at<double>(1,1)= - 0.11557; //p4;
par.at<double>(0,2)= 1.44982; //p5;
par.at<double>(1,2)= -193.66149;//p6;
//
// ....
// ....
Кроме того, вы можете использовать конструктор cv::Mat
при объявлении par
Итак, в начале кода:
Mat imgAffine, image;
Mat par(2, 3, CV_64FC1);
// Rest of your code
image = imread ("/media/sf_vbox_share/ubuntushare/board.jpg",1);
//
// ....
// ....
Других решений пока нет …