簡體   English   中英

如何在OpenCV C ++中使用warpAffine函數

[英]How to use warpAffine function in OpenCV C++

我需要使用仿射變換來扭曲圖像。 我得到的錯誤是“代碼已崩潰”。

誰能告訴我我的代碼有什么問題嗎?

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;
//
// ....
// ....

或者,可以在聲明par時使用cv::Mat的構造函數,因此在代碼的開頭:

Mat imgAffine, image;
Mat par(2, 3, CV_64FC1);

// Rest of your code
image = imread ("/media/sf_vbox_share/ubuntushare/board.jpg",1);

//
// ....
// ....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM