简诉

最近有个数据需要分类处理,是一批含有白天跟夜晚的视频数据,需要进行区分开来,单个视频严格是只有一个场景的,比如说白天整个视频就一定是白天,因为数据量有些大,几千个视频,所以就使用代码简单区分下,最后运行结果还可以,准确率百分之80十多,当然本批数据不用太严格,所以代码区分完全够了。

逻辑

  1. opencv读取视频
  2. 视频帧图片转为灰度值图片
  3. 检测偏暗元素所占整张图片的比例,大于一定阈值就认为该视频为黑夜。
  4. 选取一部分视频进行判断,并不是整个视频跑完。
  5. 当这部分视频帧为黑夜占比选取全部视频帧的50%时认为该视频为黑夜环境,移动该视频文件到另外一个文件夹。

结果

最初先测试9个视频,100%分类正确。



在进行多次阈值预设后,选取一个比较合适的阈值进行处理,准确率大概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,FileDirdef 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 1else:return 0if __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 #总共fpsvideo_capture.set(cv2.CAP_PROP_POS_FRAMES, start_fps) #设置视频起点new_paths=new_path+"\\"+FileName[i]j=0count=0while True:success,frame = video_capture.read()if success:j += 1if(j>=start_fps and j <= end_fps):flag=img_to_GRAY(frame,FileNameWithPath[i])if flag==1:count+=1elif(j>end_fps):breakelse:breakprint('%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])

python opencv 分类白天与夜景视频相关推荐

  1. python opencv按照一定间隔保存视频帧

    python opencv按照一定间隔保存视频帧 文章目录: 一.获取视频流的相关参数 二.设置间隔保存视频帧 想实现opencv读取视频帧,按照一定的时间间隔然后保存图片下来,因为所有的帧都保存下来 ...

  2. Python+OpenCV+pyQt5录制双目摄像头视频

    #Python+OpenCV+pyQt5录制双目摄像头视频 ##起因 说起来录制视频,我们可能有很多的软件,但是比较坑的是,好像很少的软件支持能够同时录制两个摄像头的视频,于是我们用python自己写 ...

  3. python+opencv打开大华摄像机视频

    学习笔记 python+opencv打开大华摄像机视频 python+opencv打开大华摄像机视频 import cv2 # 大华摄像机的视频采集语句,subtype=1,辅码流.0,主码流. ca ...

  4. python opencv输出mp4_Python玩转视频处理(四):视频按场景进行分割

    在上一篇文章(python在手,女神视频轻松有)分享了用AI人脸识别技术标记人物出现时间点来截取视频片段的教程,它的局限性在于只能通过识别特定的对象(比如人脸)来操作.在本文中将分享一个按场景进行分割 ...

  5. Python+Opencv实现把图片转为视频

    1. 安装Opencv包 在Python命令行输入如下命令(如果你使用的Anaconda,直接进入Anaconda Prompt键入命令即可.如果你不知道Anaconda是什么,可以参考王树义老师的文 ...

  6. python读取视频流做人脸识别_基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释...

    1 #-*- coding: utf-8 -*- 2 from __future__ importunicode_literals3 #操作文件 4 importos5 #科学计算 6 importn ...

  7. python+opencv将图片转换成视频

    import cv2fourcc = cv2.VideoWriter_fourcc(*'XVID')videoWriter = cv2.VideoWriter('C:/Users/gaosong7/D ...

  8. python opencv读取视频没声音_python + opencv: 解决不能读取视频的问题

    博主一开始使用python2.7和Opencv2.4.10来获取摄像头图像,程序如下: cap = cv2.VideoCapture(0) ret, frame = cap.read() 使用这个程序 ...

  9. python opencv 从Intel Realsense D435 视频流中读取并显示帧,按下空格将图像保存到指定文件夹,按下回车自动以一定时间间隔保存图像至指定文件夹

    参考文章1:opencv之读入一幅图像,显示图像以及如何保存一副图像,基础操作 参考文章2:python-OpenCV2中 cv2.VideoCapture(),read(),waitKey()的使用 ...

最新文章

  1. 读书笔记 - 《吉卜力的伙伴们》
  2. Scalaz(25)- Monad: Monad Transformer-叠加Monad效果
  3. 项目管理的十大谈判必杀技
  4. Java开发技巧——并发控制中的乐观锁与悲观锁
  5. SAP CRM AXT Genil handler
  6. ICCV2021 Oral | UNO:用于“新类发现”的统一目标函数,简化训练流程!已开源!...
  7. 树莓派3代刷ubuntu mate在命令行下配置wifi不能连接的一个诡异的bug的解决
  8. Alamofire源码解读系列(十二)之请求(Request)
  9. 【10分钟】入门人工智能
  10. OpenShift 4 之Service Mesh教程(4)- 跟踪访问后端服务超时
  11. 使用charles修改服务器返回数据,charles_01_打断点修改接口请求返回数据
  12. HTML基础:web前端建站流程
  13. MySQL数据库如何建立视图
  14. 计算机双面打印设置,双面打印怎么设置?双面打印设置方法步骤
  15. ps cs6更新服务器无响应,photoshop cs6打开无响应或者不能打开图片文件最全解决办法...
  16. 微信vue路由跳转兼容_Vue微信公众号开发踩坑记录
  17. Magnifier.js - 支持鼠标滚轮缩放的图片放大镜效果
  18. 电脑翻译软件-大家都觉得好用的免费电脑翻译软件
  19. vue页面截图;H5页面截图;vue项目中将特定网页内容生成图片(截图);html2canvas截图
  20. 基于ELK搭建网站实时日志监控平台

热门文章

  1. 关于运维的标准(ITSS信息技术服务-运行维护)介绍
  2. 【总线】什么是并行传输?什么是串行传输?什么是异步传输?什么是同步传输?什么是等时传输?
  3. matlab中如何写出图像第一行到第十行_第一列到第十列之间的数据,Excel中表示从第3列的1行到第10行的单元格引用为()。...
  4. 绝对爆笑,虽然我知道可能和别的人雷同,但欢声笑语不雷同不是么?
  5. 大学计算机基础网络应用第二套,大学计算机基础)应用指导(第2版
  6. VR看房:全景图和移动切换的实现
  7. 起伏激荡的以太网,抱上这条大腿才能乘风破浪
  8. 创业者必知的互联网思维之屌丝思维
  9. (十三) Oracle函数
  10. C++ 动态创建二维数组