仿射变换(剪切)opencv c ++

时间:2014-05-22 09:10:16

标签: c++ opencv matrix

所以我有一个图像,我想在使用OpenCV时应用剪切变换。

这是我写的一个函数,

Mat shearMat(Mat img){

Mat temp;
img.copyTo(temp);
Mat M(2,3,CV_32F);


M.at<uint16_t>(0,0) = 1;
M.at<uint16_t>(0,1) = 0;
M.at<uint16_t>(0,2) = 0;

M.at<uint16_t>(1,0) = 0;
M.at<uint16_t>(1,1) = 1;
M.at<uint16_t>(1,2) = 0;

warpAffine(temp, temp, M , Size(temp.cols,temp.rows));
imshow("Sheared_Image", temp);

M是warpAffine(<#InputArray src#>, <#OutputArray dst#>, <#InputArray M#>, <#Size dsize#>); 的inputArray 如果我想应用剪切变换,我需要知道M应该是什么样子。它说它应该是2x3矩阵。当我尝试现在显示图像时,什么都没有出现。我知道M.at<uint16_t>(1,0)应该是剪切因子,但它不适用于warpAffine。

谢谢!

1 个答案:

答案 0 :(得分:2)

您使用的是错误的数据类型。

M.at<float>(0,0) = 1;
M.at<float>(0,1) = 0;
M.at<float>(0,2) = 0;

M.at<float>(1,0) = 0.5;
M.at<float>(1,1) = 1;
M.at<float>(1,2) = 0;