日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

使用OpenCV和Python高效计算视频的总帧数

發(fā)布時(shí)間:2023/11/27 生活经验 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用OpenCV和Python高效计算视频的总帧数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用OpenCV和Python高效計(jì)算視頻的總幀數(shù)

    • 1. 效果圖
    • 2. 源碼
    • 參考

這篇博客將介紹兩種使用OpenCV和Python計(jì)算視頻文件中幀數(shù)的方法。

  1. 超級(jí)快,它依靠OpenCV的視頻屬性功能,能夠(幾乎)立即確定視頻文件中的幀數(shù)。但是由于依賴(安裝的OpenCV +視頻編解碼器版本),此方法很容易出錯(cuò),甚至可能返回?zé)o意義的結(jié)果。

    在這種情況下,需要使用第二種方法:手動(dòng)計(jì)算視頻中的幀總數(shù)。

  2. 手動(dòng)計(jì)算視頻中的幀數(shù)。盡管速度極慢,但此方法具有100%準(zhǔn)確的優(yōu)點(diǎn)。

計(jì)算可參考 imutils 庫(kù)中的count_frames函數(shù)。該函數(shù)將首先嘗試方法1,如果失敗,將自動(dòng)恢復(fù)為方法2。

使用過(guò)程中如果更偏向準(zhǔn)確性,則使用方法2,如果偏向近似值和速度,則使用方法1;

1. 效果圖

opencv自帶的高效計(jì)數(shù)如圖所示:

python count_frames.py --video videos/jurassic_park_trailer.mp4
[INFO] 4,790 total frames read from jurassic_park_trailer.mp4

低效的手動(dòng)計(jì)數(shù)如圖所示:

python frame_counter.py --video videos/jurassic_park_trailer.mp4 --override 1
[INFO] 4,978 total frames read from jurassic_park_trailer.mp4

為什么幀計(jì)數(shù)不一致?
一切都?xì)w結(jié)為快速和近似與緩慢但準(zhǔn)確的關(guān)系。

  • 使用OpenCV的視頻捕獲屬性,可以非常快速地獲得總幀數(shù),但它可能不會(huì)100%有效。而且可能完全由于OpenCV /視頻編解碼器版本控制而使這種方法失敗。
  • 使用手動(dòng)計(jì)算幀數(shù),則將花費(fèi)很長(zhǎng)時(shí)間,但是返回的幀總數(shù)將是準(zhǔn)確的。

如果需要絕對(duì)準(zhǔn)確的計(jì)數(shù),請(qǐng)使用方法2。
如果需要大致的近似值,請(qǐng)使用方法1(除非失敗,否則無(wú)論如何您都將恢復(fù)為方法2)。

2. 源碼

# USAGE
# time python frame_counter.py --video videos/example.mp4 --override 1
# time python frame_counter.py --video videos/example.mp4# 導(dǎo)入必要的包
# 如果返回的總幀數(shù)為0,則99%是以下倆個(gè)原因,1)視頻文件的路徑不對(duì);2)安裝的視頻編解碼器不對(duì),解決辦法:安裝合適的視頻編解碼器,并重新編譯安裝opencv;from imutils.video import count_frames
import argparse
import os# 構(gòu)建命令行參數(shù)及解析
# -video 視頻文件路徑
# -override 是否使用手動(dòng)計(jì)幀數(shù)
ap = argparse.ArgumentParser()
ap.add_argument("-v", "--video", required=True,help="path to input video file")
ap.add_argument("-o", "--override", type=int, default=-1,help="whether to force manual frame count")
args = vars(ap.parse_args())# 計(jì)算視頻文件的總幀數(shù)
override = False if args["override"] < 0 else True
total = count_frames(args["video"], override=override)# 展示幀總數(shù)在終端上
print("[INFO] {:,} total frames read from {}".format(total,args["video"][args["video"].rfind(os.path.sep) + 1:]))

參考

  • https://www.pyimagesearch.com/2017/01/09/count-the-total-number-of-frames-in-a-video-with-opencv-and-python/

總結(jié)

以上是生活随笔為你收集整理的使用OpenCV和Python高效计算视频的总帧数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。