Python OpenCV 图像处理:图像拼接、旋转、裁剪

► 前言

本篇将介绍使用OpenCV Python对于图像上的基本处理缩放、拼接、旋转、裁剪等操作,透过程式码的说明,让各位了解OpenCV Python于图像处理上的基本操作。

图像缩放

OpenCV使用cv2.resize()函数进行图像缩放。

函数说明:

  • src:要调整大小的原始图像。
  • dsize:输出图像的目标大小。可以包含宽度和高度的元组 (width, height),或者可以是缩放因子的元组 (fx, fy)。
  • dst(可选):输出图像(NumPy数组或Mat对象),用于存储调整大小后的图像。
  • fx(可选):水平方向的缩放因子。
  • fy(可选):垂直方向的缩放因子。
  • interpolation(可选):插值方法。当进行图像缩放时,需要根据像素的值来计算新像素的值。



  • 图像拼接

    在OpenCV中,可以使用cv2.hconcat()和cv2.vconcat()来水平和垂直合并多张图像。

    水平合并:

    垂直合并:




    ► 图像旋转

    在OpenCV中,可以使用cv2.rotate()或cv2.warpAffine()函数来实现图像旋转。

    cv2.rotate():

    提供三种样式进行图像旋转,cv2.ROTATE_90_CLOCKWISE(顺时针90度旋转)、cv2.ROTATE_90_COUNTERCLOCKWISE(逆时针90度旋转)与cv2.ROTATE_180(180度旋转)。

    如果需要进行其他角度的旋转,则需要使用cv2.warpAffine()。

    cv2.warpAffine():

    cv2.warpAffine()是OpenCV中用于图像仿射变换的通用函数,可以实现一般的仿射变换,旋转、平移、缩放和剪切等操作,透过cv2.getRotationMatrix2D()函数,可以获得用于指定旋转角度和中心点的旋转矩阵,再透过 cv2.warpAffine()将其应用于图像上。

    ► 图像裁剪

    在OpenCV中,图像裁剪透过指定裁剪的范围,然后使用NumPy切片操作对图像进行裁剪操作。



    ►  小结

    透过以上讲解,搭配程式码进行范例讲解,相信各位对于图像上的基本处理缩放、拼接、旋转、裁剪等操作能有更深刻的理解,期待下一篇博文吧!

    ► Q&A

    问题一:缩放图像时,如何避免出现失真或像素变形?

    双线性插值 cv2.INTER_LINEAR 和双三次插值 cv2.INTER_CUBIC 是常用的选项。选择较高的插值方法通常能够减少失真。

    问题二:如何确定旋转中心以获得预期的旋转效果?

    可以通过计算图像的中心座标 (width/2, height/2) ,然后将其作为旋转中心。

    问题三:在拼接图像时,如何处理两张图像的大小不一致的问题?

    可以使用 cv2.resize() 将其调整为相同大小再进行图像拼接操作,或是使用numpy的切片操作在拼接前将图像裁剪为相同大小。

    问题四:裁剪区域超出图像范围时该如何处理?