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的切片操作在拼接前將圖像裁剪為相同大小。

    問題四:裁剪區域超出圖像範圍時該如何處理?