需求
在我做圖像處理的時候有一次要將豎向的圖片變成橫向的圖片盗誊,也就是說不光圖片變換冗荸,圖片的長寬也要變換未桥,即原圖片的長變成新圖片的寬原圖片的寬變成新圖片的長。效果應如下圖:
81b5b33fcde0e49f729f912425f4aa10.jpg
變換后:
81b5b33fcde0e49f729f912425f4aa10.jpg
實現思路
方法一
在iOS開發(fā)中這個很簡單互妓,但在OpenCV里確沒有這樣的接口冯勉,原來想把Mat類型的圖片轉成UIImage類型的圖片珠闰,把圖片旋轉后再轉成Mat類型的圖片伏嗜。但這樣一來要類型轉換兩次增加了開銷承绸,本原圖片就很大這樣操作太多會引起機器發(fā)熱。
方法二
原來想用warpAffine函數和warpPerspective函數來實現變換,但這種方式的變換的輸出圖片的大小尺寸和原圖片的大小尺寸一樣均践,不能滿足我們的要求(即圖片長寬沒法改變)。但可曲線救國的方式實現彤委,可將圖片放大再旋轉最后再截取相應區(qū)域的大小即可鞭铆。但感覺這樣的開銷也很大。
方法三
在OpenCV中有個transpose函數焦影,可實現圖片方向和鏡像圖片的同時變換车遂。只要我們再用后續(xù)用flip函數實現不向方向的鏡像圖片即可實現左旋轉和右旋轉。為了快速看見效果我是用Pyhton寫的代碼實際代碼如下:
import cv2
# 讀取一張圖片
sourceImage = cv2.imread("./3.jpg")
# 顯示原圖片上
cv2.imshow("sourceImage", sourceImage)
# 轉置陣圖片
transposedImage = cv2.transpose(sourceImage)
# 顯示轉置陣后的圖片
cv2.imshow("transposedImage", transposedImage)
# 實現沿X軸方向的鏡像圖片
flipedImageX = cv2.flip(transposedImage, 0)
# 顯示沿X軸方向的鏡像圖片
cv2.imshow("flipedImageX", flipedImageX)
# 實現沿Y軸方向的鏡像圖片
flipedImageY = cv2.flip(transposedImage, 1)
# 顯示沿Y軸方向的鏡像圖片
cv2.imshow("flipedImageY", flipedImageY)
原圖片:
屏幕快照
轉置陣后的圖片:
屏幕快照
沿X軸方向的鏡像圖片:
屏幕快照
沿Y軸方向的鏡像圖片:
屏幕快照