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

      

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

在裁剪圖像之前,可以通過檢查裁剪區域的座標是否在原始圖像的範圍內來避免超出圖像範圍的問題。確保裁剪區域的座標不超過圖像的寬度和高度。

 

問題五:如何確定裁剪區域的座標範圍找出需裁剪物體?

可以透過圖像瀏覽工具或是手動測量來找出裁剪區域的左上角和右下角座標,進行圖像裁剪操作。

參考資料  

OpenCV - Open Computer Vision Library


★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

參考來源

評論