OpenCV-使用WarpeAffine旋转时图像变得模糊
我正在使用openCv的OpenCV-使用WarpeAffine旋转时图像变得模糊,opencv,image-processing,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, des
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度(以度为单位)的角度倍数旋转图像,效果会很好,但会以任意旋转角度严重模糊图像
乙二醇-
原始图像
旋转90度多次后-
旋转30度多次后-
那么,有什么方法可以将图像旋转任意角度并避免造成模糊?您可以尝试使用flags选项查看不同插值方法的结果:
INTER_NEAREST
-最近邻插值
内部线性
-双线性插值(默认)
内部区域
-使用像素区域关系重新采样。它可能是图像抽取的首选方法,因为它提供了无莫尔的结果。但是,当图像被缩放时,它类似于INTER_最近法
INTER_CUBIC
-4x4像素邻域上的双三次插值
INTER_LANCZOS4
-8x8像素邻域上的Lanczos插值
例如:
cv::warpAffine(src、dest、rotationMatrix、cv::Size(src.cols、src.rows)、cv::INTER_CUBIC)代码>
但是,由于插值,您总是会失去一些质量。最好不要在同一张图像上进行多次扭曲。是的,我想我会保留一份副本或原始图像,并在其克隆上应用旋转,而不是在单个图像上多次。另外,要添加-使用CV\u INTER\u AREA
插值缩小图像效果最好,而使用CV\u INTER\u CUBIC
或CV\u INTER\u LINEAR
扩展图像效果最好。(请阅读OpenCV手册)。CV::warpAffine
不支持INTER\u AREA
。如果使用INTER\u AREA
调用,它会自动使用INTER\u LINEAR
,请参阅。为什么这是一个可接受的答案?这些标签实际上都不能防止模糊。因为这会导致模糊:“最好不要在同一张图像上进行多次扭曲。”这仍然是一个存在的问题,给出的答案并不能解决它。