求大神指導,小弟萬分感謝!
#include
#include
#include
using namespace cv;
using namespace std;
#define WINDOW_NAME1 "【原始圖窗口】" //為窗口標題定義的宏
#define WINDOW_NAME2 "【經過perspective後的圖像】" //為窗口標題定義的宏
int main( )
{
Point2f srcTriangle[3];//定義兩組點,代表兩個四邊形
Point2f dstTriangle[3];
Mat rotMat( 3, 3, CV_32FC1 );//定義一些Mat變量
Mat warpMat( 3, 3, CV_32FC1 );
Mat srcImage, dstImage;
srcImage = imread( "picture.jpg", 1 );//加載源圖像並作一些初始化
if(!srcImage.data ) { printf("讀取圖片錯誤,請確定目錄下是否有imread函數指定的圖片存在~! \n"); return false; }
dstImage = Mat::zeros( srcImage.rows, srcImage.cols, srcImage.type() );// 設置目標圖像的大小和類型與源圖像一致
srcTriangle[0] = Point2f( 403, 189 );//設置源圖像和目標圖像上的四組點以計算透視變換
srcTriangle[1] = Point2f( 610, 202 );
srcTriangle[2] = Point2f( 382, 370 );
srcTriangle[3] = Point2f( 617, 379 );
dstTriangle[0] = Point2f( 320, 240);
dstTriangle[1] = Point2f( 640, 240);
dstTriangle[2] = Point2f( 320, 480);
dstTriangle[3] = Point2f( 640, 480);
warpMat = getPerspectiveTransform( srcTriangle, dstTriangle );
perspectiveTransform( srcImage, dstImage, warpMat );
imshow( WINDOW_NAME1, srcImage );
imshow( WINDOW_NAME2, dstImage );
waitKey(0);
return 0;
}
調試緩沖區溢出,主要還是分析源代碼,依靠調試當然是需要的。但調試不是萬能的,自己要分析一下程序哪裡可能產生緩沖區溢出?
依靠調試工具,如 VS 的在出錯時自動中斷的功能,可能會找到出錯的地方;但也可能因為溢出導致調用堆棧異常,看不到調用堆棧。