我正在使用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- 原始图像
多次旋转90度后 -
多次旋转30度后 -
那么有什么方法可以将图像旋转任意角度并避免造成模糊?
答案 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);
由于插值,你总是会失去一些品质。最好不要在同一个图像上相继进行多次扭曲。