当我使用函数“warpAffine”来处理CV_32S Mat或其他一些时,它将是错误的。我发现:也许,“warpAffine”只能处理垫子,对吗? 如果没有,我怎么能warpAffine其他类型的垫?谢谢你!
这里,如果src不是uchar类型,则会出错。
Mat src= Mat::zeros( 50, 50, CV_32S );
Mat warp_dst= Mat::zeros( src.rows, (int)src.cols*1.41421356+1, CV_32S );
for (int i = 0; i < 50; i++)
for (int j = 0; j < 50; j++)
{
(int)src.at<int>(i,j) =i*j;
cout << (int)src.at<int>(i,j) <<endl;
}
srcTri[0] = Point2f( 0.0,0.0 );
srcTri[1] = Point2f( src.cols*1.0 - 1, 0 );
srcTri[2] = Point2f( 0, src.rows*1.0 - 1 );
dstTri[0] = Point2f( src.cols*0.0, src.rows*0.0 );
dstTri[1] = Point2f( src.cols*1.0-1, src.rows*0.0 );
dstTri[2] = Point2f( src.cols*0.41421356-1, src.rows*1.0-1 );
warp_mat = getAffineTransform( srcTri, dstTri );
warpAffine( src, warp_dst, warp_mat, warp_dst.size() );