Python下獲取視訊的旋轉角度資訊
1. 描述
使用手機等電子產品錄製的視訊在電腦上播放的時候是正的,但是使用OpenCV庫進行讀取的時候卻是另外的角度,這是因為OpenCV在讀取視訊資料的時候沒有去考慮視訊內部儲存的TAG資訊(其中包含旋轉角度等),但是使用OpenCV庫卻無法獲取視訊的旋轉角度資訊。對此,可以使用python包scikit-video
進行獲取。
安裝scikit-video
:
pip install scikit-video
2. 參考程式碼
import cv2
import skvideo.io
# 得到旋轉角度之後,對視訊幀旋轉對應的負角度便可以得到正向的影像
def rotate_img_data(img_data, degree):
h, w = img_data.shape[:2]
(cx, cy) = (w / 2, h / 2)
# 設定旋轉矩陣
M = cv2.getRotationMatrix2D((cx, cy), -degree, scale=1.0)
cos = np.abs(M[0, 0])
sin = np.abs(M[0, 1])
# 計算影像旋轉後的新邊界
nW = int((h * sin) + (w * cos))
nH = int((h * cos) + (w * sin))
# 調整旋轉矩陣的移動距離(t_{x}, t_{y})
M[0, 2] += (nW / 2) - cx
M[1, 2] += (nH / 2) - cy
img_rotated = cv2.warpAffine(img_data, M, (nW, nH))
return img_rotated
if __name__ == "__main__":
file_name = "test.MOV"
# get video info(rotate)
video_metadata = skvideo.io.ffprobe(file_name)
video_tag_info = video_metadata['video']['tag']
rotate_degree_info = -1.0
for tag_info in video_metadata['video']['tag']:
for key, val in tag_info.items():
if val == "rotate":
rotate_degree_info = float(tag_info["@value"])
print("Info: video rotate degree info:{}".format(rotate_degree_info))
break
# read video sequence
video_io = cv2.VideoCapture(file_name)
all_frame_nums = video_io.get(cv2.CAP_PROP_FRAME_COUNT)
read_status, video_frame = video_io.read()
while read_status:
# rotate the image if needs
if abs(-1.0 - rotate_degree_info) > 1.0:
video_frame = rotate_img_data(video_frame.copy(), rotate_degree_info)
read_status, video_frame = video_io.read()
PS:其中旋轉部分程式碼來自:正確使用OpenCV和Python旋轉影像
相關文章
- JS獲取照片拍攝的角度屬性,用於旋轉控制JS
- opencv python 從攝像頭獲取視訊/從檔案獲取視訊 /儲存視訊OpenCVPython
- iOS 視訊剪下、旋轉,視訊新增音訊、新增水印,視訊匯出iOS音訊
- iOS圖片,視訊上傳&視訊內容旋轉iOS
- 視訊播放器全屏旋轉方案播放器
- JAVA通過URL連結獲取視訊檔案資訊(無需下載檔案)Java
- 小程式視訊旋轉的相關問題
- Python獲取系統資訊模組psutil(轉載)Python
- .net core Docker 容器新增ffmpeg 獲取視訊資訊和截圖Docker
- canvas 旋轉角度不需要累加Canvas
- 【玩具】獲取B站視訊的音訊片段音訊
- 獲取本地圖片/視訊地圖
- iOS 獲取視訊圖片iOS
- 分享下 PHP 使用 getID3 來獲取音訊、視訊等媒體檔案相關資訊PHP音訊
- 視覺化基礎:已知2點座標,如何求旋轉角度?視覺化
- 【Python】獲取機器使用資訊Python
- canvas 繪製旋轉一定角度的矩形Canvas
- 前端獲取視訊編碼格式前端
- 自定義訊息獲取訊息(轉)
- Tipard Video Converter Ultimate如何旋轉視訊?IDE
- 使用Python獲取ECS相關資訊Python
- Python 指令碼之獲取CPU資訊Python指令碼
- 【Python小隨筆】 SSH 獲取資訊Python
- canvas繪製旋轉一定角度的矩形效果Canvas
- iOS獲取通訊錄聯絡人資訊iOS
- python使用wmi模組獲取windows下的系統資訊 監控系統PythonWindows
- Python爬取動態載入的視訊(梨視訊,xpath)Python
- 使用 Python 獲取 Linux 系統資訊PythonLinux
- Android 對佈局進行任意角度旋轉Android
- OpenCV-Python 視訊讀取OpenCVPython
- Android CameraX ImageAnalysis 獲取視訊幀Android
- 獲取網路視訊任意幀畫面
- Python獲取IP地址對應的地理位置資訊!Python
- python-help()獲取關於物件的幫助資訊Python物件
- 自定義圓環,跟隨手指旋轉角度加減layer
- css控制div元素旋轉指定角度程式碼例項CSS
- python 爬取騰訊視訊的全部評論Python
- 如何獲取HTML5視訊的持續時間HTML