91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用opencv分類白天與夜景視頻

發布時間:2021-06-04 16:25:20 來源:億速云 閱讀:238 作者:栢白 欄目:開發技術

本篇文章和大家了解一下如何使用opencv分類白天與夜景視頻。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

簡訴

最近有個數據需要分類處理,是一批含有白天跟夜晚的視頻數據,需要進行區分開來,單個視頻嚴格是只有一個場景的,比如說白天整個視頻就一定是白天,因為數據量有些大,幾千個視頻,所以就使用代碼簡單區分下,最后運行結果還可以,準確率百分之80十多,當然本批數據不用太嚴格,所以代碼區分完全夠了。

邏輯

  •  opencv讀取視頻

  • 視頻幀圖片轉為灰度值圖片

  • 檢測偏暗元素所占整張圖片的比例,大于一定閾值就認為該視頻為黑夜。

  • 選取一部分視頻進行判斷,并不是整個視頻跑完。

  • 當這部分視頻幀為黑夜占比選取全部視頻幀的50%時認為該視頻為黑夜環境,移動該視頻文件到另外一個文件夾。

結果

最初先測試9個視頻,100%分類正確。

如何使用opencv分類白天與夜景視頻

如何使用opencv分類白天與夜景視頻

如何使用opencv分類白天與夜景視頻

在進行多次閾值預設后,選取一個比較合適的閾值進行處理,準確率大概86%左右。

源碼

import cv2
import numpy as np
import os,time
import shutil
def GetImgNameByEveryDir(file_dir,videoProperty):  
    FileNameWithPath = [] 
    FileName         = []
    FileDir          = []
    for root, dirs, files in os.walk(file_dir):  
        for file in files:  
            if os.path.splitext(file)[1] in videoProperty:  
                FileNameWithPath.append(os.path.join(root, file))  # 保存圖片路徑
                FileName.append(file)                              # 保存圖片名稱
                FileDir.append(root[len(file_dir):])               # 保存圖片所在文件夾
    return FileName,FileNameWithPath,FileDir
 
def img_to_GRAY(img,pic_path):
    #把圖片轉換為灰度圖
    gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    #獲取灰度圖矩陣的行數和列數
    r,c = gray_img.shape[:2]
    piexs_sum=r*c #整個圖的像素個數
    #遍歷灰度圖的所有像素
    #灰度值小于60被認為是黑
    dark_points = (gray_img < 60)
    target_array = gray_img[dark_points]
    dark_sum = target_array.size #偏暗的像素
    dark_prop=dark_sum/(piexs_sum) #偏暗像素所占比例
    if dark_prop >=0.60: #若偏暗像素所占比例超過0.6,認為為整體環境黑暗的圖片
        return 1
    else:
        return 0

if __name__ =='__main__':
    path="C:\\Users\\Administrator\\Desktop\\cut_video"
    new_path=path+"\\DarkNight"
    if not os.path.exists(new_path):
        os.mkdir(new_path)
    FileName,FileNameWithPath,FileDir=GetImgNameByEveryDir(path,'.mp4')
    for i in range(len(FileNameWithPath)):
        video_capture = cv2.VideoCapture(FileNameWithPath[i])
        video_size = (int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
        total_frames = int(video_capture.get(cv2.CAP_PROP_FRAME_COUNT))
        video_fps = int(video_capture.get(5))
        start_fps=2*video_fps #從2秒開始篩選
        end_fps=6*video_fps #6秒結束
        avg_fps=end_fps-start_fps #總共fps
        video_capture.set(cv2.CAP_PROP_POS_FRAMES, start_fps) #設置視頻起點
        new_paths=new_path+"\\"+FileName[i]
        j=0
        count=0
        while True:
            success,frame = video_capture.read()
            if success:
                j += 1
                if(j>=start_fps and j <= end_fps):
                    flag=img_to_GRAY(frame,FileNameWithPath[i])
                    if flag==1:
                        count+=1
                elif(j>end_fps):
                    break
            else:
                break
        print('%s,%s'%(count,avg_fps))
        if count>int(avg_fps*0.48): #大于fps50%為黑夜
            print("%s,該視頻為黑夜"%FileNameWithPath[i])
            video_capture.release() #釋放讀取的視頻,不占用視頻文件
            time.sleep(0.2)
            shutil.move(FileNameWithPath[i],new_paths)
        else:
            print("%s,該視頻為白天"%FileNameWithPath[i])

以上就是如何使用opencv分類白天與夜景視頻的簡略介紹,當然詳細使用上面的不同還得要大家自己使用過才領會。如果想了解更多,歡迎關注億速云行業資訊頻道哦!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

莲花县| 合江县| 沈阳市| 通许县| 和静县| 柞水县| 武威市| 景宁| 财经| 昌都县| 遂溪县| 舒兰市| 昭苏县| 舞钢市| 布尔津县| 曲靖市| 清流县| 松原市| 西林县| 铁力市| 彭山县| 安泽县| 临海市| 岑巩县| 民丰县| 霍城县| 陵水| 长治市| 辽中县| 二连浩特市| 北京市| 金乡县| 平和县| 当涂县| 黔东| 正安县| 黄石市| 准格尔旗| 军事| 方城县| 阿拉善右旗|