圖像旋轉後的矩陣觀察-2 使用 OpenCV

圖像驗證 andy 3年前 (2021-09-20) 1085次浏览 已收录 0个评论 扫描二维码

圖像旋轉後的矩陣觀察

接下來我們使用 OpenCV 來做跟上一篇一樣的事,但是 cv2 的做法有些許不同,就是這些不同,導致了疏乎。

import cv2

src = cv2.imread(r"Lena_Gray.tiff", cv2.IMREAD_GRAYSCALE)
print(f"Image shape:{src.shape}")
window_name = 'Image'
cv2.imshow(window_name, src)
cv2.waitKey(0)

(center_x, center_y) = (src.shape[0]//2, src.shape[1]//2)
transform_matrix = cv2.getRotationMatrix2D((center_x, center_y), 45, 1)
rotated = cv2.warpAffine(src, transform_matrix, (src.shape[0], src.shape[1]))

print(print(f"New shape:{rotated.shape}"))
print(rotated)

cv2.imshow(window_name, rotated)
cv2.waitKey(0)

一開始直接以灰階讀入,所以 Image shape 就直接是 (512, 512),圖片的顯示也是 Lena 沒有出現問題,接下來才是出問題的地方。
因為 cv2 對於旋轉的方式跟其他的程式庫不同,是專門為圖像而設計的,不是只有處理陣列 。cv2 在處理平移、旋轉、縮放
、翻轉時,需要用到轉換矩陣,這個轉換矩是 2 * 3 或是 3 * 3 的陣列,我們使用 cv2.getRotationMatrix2D ,會產生 2 * 3 的轉換矩陣 。在旋轉時可以指定以哪個點做中心,旋轉幾度,要不要進行縮放。最後再轉換矩陣做為參數傳入,使用 cv2.warpAffine 生成最後的矩陣,同時要指定圖片的長寬。

旋轉之後的圖像顯示如下
圖像旋轉後的矩陣觀察-2 使用 OpenCV

我們會發現,因為我們以圖像為中心旋轉45度,並指定了原圖的長寬 512 * 512,所以就變成了這張圖。

這張圖將導致,圖片的四個角落被丟棄,並且又加上了旋轉產生的空白資料,這些空白資料就是圖上黑色的部份。本來對旋轉的效果就比較差的特徵提取,效果應該會更差。

最後,透過本次的觀察實作,得到的經驗是,使用不同的工具時應該更加了解工具的特性。另外,在實驗時,什麼做為輸入資料正不正確,輸出是什麼,都應該注重。不然就會像這次這樣,使用的工具不同,導致意外的輸出,而這個意外的輸出又沒有經過檢查,直接導入下一個步驟。就會產生一系列的問題。在每個步驟確輸出結果,是很重要的。


神隊友學長Andy , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:圖像旋轉後的矩陣觀察-2 使用 OpenCV
喜欢 (1)
[[email protected]]
分享 (0)
andy
关于作者:
中年大叔,打拼 like young students.
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址