所以我有一个图像,我想在使用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。
谢谢!
答案 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;