【发布时间】:2017-12-12 20:26:44
【问题描述】:
我想要做的是使用(Matlab)变换矩阵变换图像。它是以下 3x3 维度的 2D 变换矩阵:
aaa bbb 0 ccc ddd 0 eee fff 1
我在这里找到了一个很好的解释:how to transform an image with a transformation Matrix in OpenCv? 但我无法填充 3x3 矩阵(并将其应用于图像)。这是我的代码:
cv::Mat t(3,3,CV_64F,cvScalar(0.0));
t.at<double>(0, 0) = aaa;
t.at<double>(1, 0) = bbb;
t.at<double>(2, 0) = 0;
t.at<double>(0, 1) = ccc;
t.at<double>(1, 1) = ddd;
t.at<double>(2, 1) = 0;
t.at<double>(0, 2) = eee;
t.at<double>(1, 2) = fff;
t.at<double>(2, 2) = 1;
cv::Mat dest;
cv::Size size(imageToTransform.cols,imageToTransform.rows);
warpAffine(imageToTransform, outputImage, t, size, INTER_LINEAR, BORDER_CONSTANT);
imshow("outputImage", outputImage);
导致以下错误:
OpenCV 错误:断言失败 ((M0.type() == CV_32F || M0.type() == CV_64F) && M0.rows == 2 && M0.cols == 3)
知道这里有什么问题吗?
【问题讨论】:
-
这里不是opencv行家,但是看到断言,你的矩阵需要有2行
-
@Lovy 但导致
cv::Mat t(3,3,CV_64F,cvScalar(0.0));不是 3 行? -
warpAffine函数要求转换矩阵是 2x3 矩阵,但在您的情况下它是 3x3 矩阵。