opencv warpAffine精度

时间:2015-05-26 10:07:42

标签: c++ opencv opencv3.0

我正在尝试使用OpenCVs warpAffine来转换图像。我使用双线性插值选项(默认设置)。当使用非常小的变换(例如,0.01像素的平移)时,变换后的图像与原始图像完全相同。这是有问题的,因为我需要一个很大的精度,因为对变换后的图像进行了进一步的计算。

示例:

Mat img_test = (Mat_<double>(5,5) << 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0);
Mat tfm; Mat transf_img_test;
tfm = Mat::eye(2,3,CV_64F);
tfm.at<double>(0,2) = 0.01;
warpAffine( img_test, transf_img_test, tfm, img_test.size(), INTER_LINEAR);
cout << "Original = " << img_test << endl;
cout << "Transformed = " << transf_img_test << endl;

两张图片完全相同:

Original = [0, 0, 0, 0, 0;
            0, 0, 1, 0, 0;
            0, 0, 1, 0, 0;
            0, 0, 1, 0, 0;
            0, 0, 0, 0, 0]
Transformed = [0, 0, 0, 0, 0;
               0, 0, 1, 0, 0;
               0, 0, 1, 0, 0;
               0, 0, 1, 0, 0;
               0, 0, 0, 0, 0]

请注意,当我设置

tfm.at<double>(0,2) = 0.5, 

相反,warpAffine正确地转换(和插值)图像。

0 个答案:

没有答案