![654bc8cdbd946d16072591aa2c9671bb.png](https://i-blog.csdnimg.cn/blog_migrate/40d03cbfa43460521a16bd454bcda10a.png)
从几何上来讲,图像可以被理解为像素的二维平面,平面上最简单的变换是线性变换,在图像上我们通常叫它们为仿射变换,仿射变换通常由一个2x3的矩阵,之所以用2x3的矩阵,而不由2x2方阵来描述,是考虑到了平移,任意仿射变换都可以分解为以下四类变换的叠加:平移,放缩(尺度变换),旋转和切变。
更一般的,在图像几何变换中我们更常用的一般是旋转,裁剪和resize,它们都是仿射变换的具体类型。在用深度学习做目标检测的时候,我们通常需要把检测框检测到的物体,裁剪出来,如果检测框有旋转,我们还需要旋转检测框,并缩放到同一尺寸。这里就不得不提到lettebox变换了,这个一个被忽视的很重要的变换,我们在数据集上训练网络的时候,通常需要把数据集变换到同一尺寸,但是通常的resize函数会破环图像的纵横比,aspect ratio,做过检测任务的同学都知道,aspect ratio对于检测的效果非常重要,letterbox就是在保持纵横比的前提下对图像做resize,先resize然后按需要在周围pad上0像素。
使用opencv来实现letterbox变换的代码如下:
def cv2_letterbox_image(image, e