OpenCV - 使用warpAffine旋转时图像变得模糊

时间:2014-07-25 10:44:47

标签: opencv image-processing

我正在使用openCv的warpAffine()函数来使用此代码旋转图像 -

void rotateImage(const Mat &src, Mat &dest, double angle)
{
    cv::Point2f point(src.cols/2, src.rows/2);

    Mat rotationMatrix = cv::getRotationMatrix2D(point, angle, 1.0);

    cv::warpAffine(src, dest, rotationMatrix, cv::Size(src.cols, src.rows));
}

如果我以90度(以度为单位)的角度旋转图像,但任意旋转角度都会使图像模糊不清,那么它可以正常工作。

EG- 原始图像

enter image description here

多次旋转90度后 -

enter image description here

多次旋转30度后 -

enter image description here

那么有什么方法可以将图像旋转任意角度并避免造成模糊?

1 个答案:

答案 0 :(得分:8)

您可以尝试使用flags选项查看不同插值方法的结果:

INTER_NEAREST - 最近邻插值

INTER_LINEAR - 双线性插值(默认)

INTER_AREA - 使用像素区域关系重新采样。它可能是图像抽取的首选方法,因为它可以提供无莫尔条纹的结果。但是当图像被缩放时,它类似于INTER_NEAREST方法。

INTER_CUBIC - 4x4像素邻域的双三次插值

INTER_LANCZOS4 - 8x8像素邻域的Lanczos插值

例如:

cv::warpAffine(src, dest, rotationMatrix, cv::Size(src.cols, src.rows),cv::INTER_CUBIC);

由于插值,你总是会失去一些品质。最好不要在同一个图像上相继进行多次扭曲。