最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用OpenCV實(shí)現(xiàn)逐幀獲取視頻圖片

 更新時(shí)間:2024年03月20日 10:01:41   作者:學(xué)習(xí)BigData  
這篇文章主要為大家詳細(xì)介紹了如何使用OpenCV實(shí)現(xiàn)逐幀獲取視頻中的圖片用來(lái)標(biāo)注,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

背景

由于我要做一個(gè)深度學(xué)習(xí)方向的計(jì)算機(jī)視覺(jué)項(xiàng)目,需要一些數(shù)據(jù)集來(lái)進(jìn)行訓(xùn)練,我便想嘗試捕獲視頻中的圖片用來(lái)標(biāo)注。

注意事項(xiàng)

如果視頻中的場(chǎng)景單一,那么使用該視頻獲取的數(shù)據(jù)集訓(xùn)練出的模型面對(duì)其他場(chǎng)景的泛化能力就會(huì)受到限制。為了提高數(shù)據(jù)集的多樣性,可以采用多種不同場(chǎng)景的視頻,并且在獲取數(shù)據(jù)時(shí)采用大間隔捕獲的方式。采用大間隔捕獲數(shù)據(jù)的方法可以捕獲到的圖片同質(zhì)化降低,從而進(jìn)一步增加數(shù)據(jù)集的多樣性。

import os
import sys
from concurrent.futures import ThreadPoolExecutor
import cv2

def output_img(video_path,img_dir):
#     由視頻逐幀輸出圖片
#     video_path: 視頻文件路徑
#     img_dir: 圖片保存目錄路徑,路徑不支持中文
    os.makedirs(img_dir,exist_ok=True)
#     img_dir:表示要?jiǎng)?chuàng)建的目錄路徑。
#     exist_ok=True:表示如果目錄已經(jīng)存在時(shí)不拋出異常。如果將 exist_ok 設(shè)置為 True,那么如果目錄已經(jīng)存在,os.makedirs() 函數(shù)也不會(huì)報(bào)錯(cuò);如果設(shè)置為 False,則會(huì)拋出一個(gè) FileExistsError 異常。
    cv = cv2.VideoCapture(video_path)
    frame_count = 0 
    # 計(jì)數(shù)器
    n = 0
    # 命名計(jì)數(shù)器
    while True:
        ret,frame = cv.read()
        if not ret:
            break
        frame_count += 1
        if frame_count % 30 ==0:
            # 每隔三十幀獲取一次圖片
            n += 1
            img_name = "0000000{0}.jpg".format(n)
            img_file_path = os.path.join(img_dir,img_name)
            if not os.path.exists(img_file_path):
                sys.stdout.write("創(chuàng)建文件:"+ img_file_path + "\n")
                # 標(biāo)準(zhǔn)輸出流,將指定文本輸出到控制臺(tái)或其他輸出設(shè)備中
                cv2.imwrite(img_file_path,frame,[cv2.IMWRITE_JPEG_QUALITY,100])
                # 將圖像幀保存為jepg格式的圖像,質(zhì)量最高為100
            else:
                sys.stderr.write("跳過(guò):" + img_file_path + "\n")
                ret,frame = cv.read()

def run(video_dir,img_dir):
    pool = ThreadPoolExecutor()
    # 創(chuàng)建一個(gè)線程池對(duì)象,實(shí)例化ThreadPoolExecutor類(lèi),將任務(wù)提交給線程池,線程池會(huì)自動(dòng)調(diào)度線程來(lái)執(zhí)行這些任務(wù)
    for file in os.listdir(video_dir):
        if file[-4:] == ".mp4":
            video_file_path = os.path.join(video_dir,file)
            img_dir_name = os.path.join(img_dir,file[:-4])
            os.makedirs(img_dir_name,exist_ok=True)
            pool.submit(output_img,*(video_file_path,img_dir_name))
#* 和 ** 是用于解包參數(shù)的操作符。在這種情況下,*(video_file_path, img_dir_name)
# 的作用是將元組 (video_file_path, img_dir_name) 中的元素解包并作為單獨(dú)的參數(shù)傳遞給函數(shù)。

if __name__ == '__main__':
    run(r"E:\video",r"E:\image")

知識(shí)補(bǔ)充

除了上文的方法,小編還為大家整理了opencv按幀提取視頻中的圖片的相關(guān)方法,希望對(duì)大家有所幫助

方法一

import cv2
import logging

# log information settings
logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s - %(levelname)s: %(message)s')


def save_image(num, image):
    image_path = 'D:\CODE\keras-face-recognition\jietu/{}.jpg'.format(str(num))
    cv2.imwrite(image_path, image)

vc = cv2.VideoCapture('1.avi')

if vc.isOpened():
    ret, frame = vc.read()
else:
    ret = False

count = 0               # 照片排序
frame_interval = 10     # 隔10幀取圖片
frame_interval_count = 0

while ret:
    ret, frame = vc.read()
    if frame_interval_count % frame_interval == 0:
        save_image(count, frame)
        logging.info("num:" + str(count) + ", frame: " +
                     str(frame_interval_count))
        count += 1
    frame_interval_count += 1
    cv2.waitKey(1)

vc.release()

方法二

import cv2
import os
#要提取視頻的文件名,隱藏后綴
sourceFileName='a2'
#在這里把后綴接上
video_path = os.path.join("", "", sourceFileName+'.mp4')
times=0
#提取視頻的頻率,每25幀提取一個(gè)
frameFrequency=25
#輸出圖片到當(dāng)前目錄vedio文件夾下
outPutDirName='vedio/'+sourceFileName+'/'
if not os.path.exists(outPutDirName):
    #如果文件目錄不存在則創(chuàng)建目錄
    os.makedirs(outPutDirName) 
camera = cv2.VideoCapture(video_path)
while True:
    times+=1
    res, image = camera.read()
    if not res:
        print('not res , not image')
        break
    if times%frameFrequency==0:
        cv2.imwrite(outPutDirName + str(times)+'.jpg', image)
        print(outPutDirName + str(times)+'.jpg')
print('圖片提取結(jié)束')
camera.release()

方法三

import cv2
import os
 
video_path = 'D:/BaiduNetdiskDownload/DISFA/Videos_LeftCamera/LeftVideoSN032_comp.avi'  # 視頻文件地址,是視頻文件
timeF = 1  # 隔timeF幀截一次圖,1表示全截
 
 
images_path = video_path.split('.', 1)[0]  #.號(hào)隔開(kāi),1代表分割一次
if not os.path.exists(images_path):  # 文件夾不存在則新建
    os.mkdir(images_path)
 
vc = cv2.VideoCapture(video_path) # 讀入視頻文件
c = 0
rat = 1
if vc.isOpened(): # 判斷是否正常打開(kāi)
    print('視頻讀取成功,正在逐幀截取...')
    while rat:  # 循環(huán)讀取視頻幀
        rat, frame = vc.read()  # frame為一幀圖像,當(dāng)frame為空時(shí),ret返回false,否則為true
        if(c%timeF == 0 and rat == True): # 每隔timeF幀截一次圖像
            cv2.imwrite(images_path + '/' +  str(c) + '.jpg',frame)
        c = c + 1
    vc.release()
    print('截取完成,圖像保存在:%s' %images_path)
else:
    print('視頻讀取失敗,請(qǐng)檢查文件地址')

到此這篇關(guān)于使用OpenCV實(shí)現(xiàn)逐幀獲取視頻圖片的文章就介紹到這了,更多相關(guān)OpenCV獲取視頻圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Pandas設(shè)置DataFrame的index索引起始值為1的兩種方法

    Pandas設(shè)置DataFrame的index索引起始值為1的兩種方法

    DataFrame中的index索引列默認(rèn)是從0開(kāi)始的,那么我們?nèi)绾卧O(shè)置index索引列起始值從1開(kāi)始呢,本文主要介紹了Pandas設(shè)置DataFrame的index索引起始值為1的兩種方法,感興趣的可以了解一下
    2024-07-07
  • Pandas數(shù)據(jù)結(jié)構(gòu)詳細(xì)說(shuō)明及如何創(chuàng)建Series,DataFrame對(duì)象方法

    Pandas數(shù)據(jù)結(jié)構(gòu)詳細(xì)說(shuō)明及如何創(chuàng)建Series,DataFrame對(duì)象方法

    本篇文章中,我們主要側(cè)重于介紹Pandas數(shù)據(jù)結(jié)構(gòu)本身的特性,以及如何創(chuàng)建一個(gè)Series或者DataFrame數(shù)據(jù)對(duì)象,并填入一些數(shù)據(jù)
    2021-10-10
  • Python+Selenium瀏覽器自動(dòng)化測(cè)試與網(wǎng)頁(yè)自動(dòng)登錄

    Python+Selenium瀏覽器自動(dòng)化測(cè)試與網(wǎng)頁(yè)自動(dòng)登錄

    在日常開(kāi)發(fā)、測(cè)試和辦公自動(dòng)化中,我們經(jīng)常會(huì)遇到一些重復(fù)性的瀏覽器操作,如果這些操作每天都要重復(fù)執(zhí)行,手動(dòng)處理不僅浪費(fèi)時(shí)間,還容易因?yàn)槁c(diǎn)、輸錯(cuò)、忘記截圖而出錯(cuò),本文面向Python自動(dòng)化測(cè)試初學(xué)者,通過(guò)一個(gè)完整案例講解如何使用Selenium自動(dòng)打開(kāi)網(wǎng)頁(yè)
    2026-05-05
  • 解決python文件字符串轉(zhuǎn)列表時(shí)遇到空行的問(wèn)題

    解決python文件字符串轉(zhuǎn)列表時(shí)遇到空行的問(wèn)題

    下面小編就為大家?guī)?lái)一篇解決python文件字符串轉(zhuǎn)列表時(shí)遇到空行的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • python 獲取微信好友列表的方法(微信web)

    python 獲取微信好友列表的方法(微信web)

    今天小編就為大家分享一篇python 獲取微信好友列表的方法(微信web),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Python中unittest的斷言方法詳解

    Python中unittest的斷言方法詳解

    大家好,本篇文章主要講的是Python中unittest的斷言方法詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 如何將PySpark導(dǎo)入Python的放實(shí)現(xiàn)(2種)

    如何將PySpark導(dǎo)入Python的放實(shí)現(xiàn)(2種)

    這篇文章主要介紹了如何將PySpark導(dǎo)入Python的放實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • python 裝飾器的使用示例

    python 裝飾器的使用示例

    這篇文章主要介紹了python 裝飾器的使用示例,幫助大家更好的理解和使用python裝飾器,感興趣的朋友可以了解下
    2020-10-10
  • Python使用Playwright實(shí)現(xiàn)屏幕截圖的示例詳解

    Python使用Playwright實(shí)現(xiàn)屏幕截圖的示例詳解

    在軟件開(kāi)發(fā)和測(cè)試中,屏幕截圖是一種常用的工具,用于記錄應(yīng)用程序的狀態(tài)、錯(cuò)誤信息等,Playwright 提供了一種簡(jiǎn)單而強(qiáng)大的方式來(lái)實(shí)現(xiàn)屏幕截圖,下面我們就來(lái)看看具體方法吧
    2025-12-12
  • Windows安裝Anaconda3的方法及使用過(guò)程詳解

    Windows安裝Anaconda3的方法及使用過(guò)程詳解

    今天帶大家學(xué)習(xí)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著在windows上Anaconda3的安裝方法及使用展開(kāi),文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06

最新評(píng)論

大关县| 永仁县| 瑞昌市| 来安县| 郑州市| 玉山县| 东山县| 淮北市| 大石桥市| 汉川市| 新宁县| 修武县| 明溪县| 盖州市| 射阳县| 卓资县| 玛多县| 本溪| 四川省| 汨罗市| 克拉玛依市| 乌兰浩特市| 朝阳县| 安顺市| 临朐县| 冕宁县| 原阳县| 西安市| 浮梁县| 盐边县| 南安市| 江永县| 红河县| 靖宇县| 镇远县| 白城市| 普兰店市| 汝阳县| 衡山县| 思南县| 荥经县|