python opencv 分类白天与夜景视频
简诉
最近有个数据需要分类处理,是一批含有白天跟夜晚的视频数据,需要进行区分开来,单个视频严格是只有一个场景的,比如说白天整个视频就一定是白天,因为数据量有些大,几千个视频,所以就使用代码简单区分下,最后运行结果还可以,准确率百分之80十多,当然本批数据不用太严格,所以代码区分完全够了。
逻辑
- opencv读取视频
- 视频帧图片转为灰度值图片
- 检测偏暗元素所占整张图片的比例,大于一定阈值就认为该视频为黑夜。
- 选取一部分视频进行判断,并不是整个视频跑完。
- 当这部分视频帧为黑夜占比选取全部视频帧的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 分类白天与夜景视频相关推荐
- python opencv按照一定间隔保存视频帧
python opencv按照一定间隔保存视频帧 文章目录: 一.获取视频流的相关参数 二.设置间隔保存视频帧 想实现opencv读取视频帧,按照一定的时间间隔然后保存图片下来,因为所有的帧都保存下来 ...
- Python+OpenCV+pyQt5录制双目摄像头视频
#Python+OpenCV+pyQt5录制双目摄像头视频 ##起因 说起来录制视频,我们可能有很多的软件,但是比较坑的是,好像很少的软件支持能够同时录制两个摄像头的视频,于是我们用python自己写 ...
- python+opencv打开大华摄像机视频
学习笔记 python+opencv打开大华摄像机视频 python+opencv打开大华摄像机视频 import cv2 # 大华摄像机的视频采集语句,subtype=1,辅码流.0,主码流. ca ...
- python opencv输出mp4_Python玩转视频处理(四):视频按场景进行分割
在上一篇文章(python在手,女神视频轻松有)分享了用AI人脸识别技术标记人物出现时间点来截取视频片段的教程,它的局限性在于只能通过识别特定的对象(比如人脸)来操作.在本文中将分享一个按场景进行分割 ...
- Python+Opencv实现把图片转为视频
1. 安装Opencv包 在Python命令行输入如下命令(如果你使用的Anaconda,直接进入Anaconda Prompt键入命令即可.如果你不知道Anaconda是什么,可以参考王树义老师的文 ...
- python读取视频流做人脸识别_基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释...
1 #-*- coding: utf-8 -*- 2 from __future__ importunicode_literals3 #操作文件 4 importos5 #科学计算 6 importn ...
- python+opencv将图片转换成视频
import cv2fourcc = cv2.VideoWriter_fourcc(*'XVID')videoWriter = cv2.VideoWriter('C:/Users/gaosong7/D ...
- python opencv读取视频没声音_python + opencv: 解决不能读取视频的问题
博主一开始使用python2.7和Opencv2.4.10来获取摄像头图像,程序如下: cap = cv2.VideoCapture(0) ret, frame = cap.read() 使用这个程序 ...
- python opencv 从Intel Realsense D435 视频流中读取并显示帧,按下空格将图像保存到指定文件夹,按下回车自动以一定时间间隔保存图像至指定文件夹
参考文章1:opencv之读入一幅图像,显示图像以及如何保存一副图像,基础操作 参考文章2:python-OpenCV2中 cv2.VideoCapture(),read(),waitKey()的使用 ...
最新文章
- 读书笔记 - 《吉卜力的伙伴们》
- Scalaz(25)- Monad: Monad Transformer-叠加Monad效果
- 项目管理的十大谈判必杀技
- Java开发技巧——并发控制中的乐观锁与悲观锁
- SAP CRM AXT Genil handler
- ICCV2021 Oral | UNO:用于“新类发现”的统一目标函数,简化训练流程!已开源!...
- 树莓派3代刷ubuntu mate在命令行下配置wifi不能连接的一个诡异的bug的解决
- Alamofire源码解读系列(十二)之请求(Request)
- 【10分钟】入门人工智能
- OpenShift 4 之Service Mesh教程(4)- 跟踪访问后端服务超时
- 使用charles修改服务器返回数据,charles_01_打断点修改接口请求返回数据
- HTML基础:web前端建站流程
- MySQL数据库如何建立视图
- 计算机双面打印设置,双面打印怎么设置?双面打印设置方法步骤
- ps cs6更新服务器无响应,photoshop cs6打开无响应或者不能打开图片文件最全解决办法...
- 微信vue路由跳转兼容_Vue微信公众号开发踩坑记录
- Magnifier.js - 支持鼠标滚轮缩放的图片放大镜效果
- 电脑翻译软件-大家都觉得好用的免费电脑翻译软件
- vue页面截图;H5页面截图;vue项目中将特定网页内容生成图片(截图);html2canvas截图
- 基于ELK搭建网站实时日志监控平台
热门文章
- 关于运维的标准(ITSS信息技术服务-运行维护)介绍
- 【总线】什么是并行传输?什么是串行传输?什么是异步传输?什么是同步传输?什么是等时传输?
- matlab中如何写出图像第一行到第十行_第一列到第十列之间的数据,Excel中表示从第3列的1行到第10行的单元格引用为()。...
- 绝对爆笑,虽然我知道可能和别的人雷同,但欢声笑语不雷同不是么?
- 大学计算机基础网络应用第二套,大学计算机基础)应用指导(第2版
- VR看房:全景图和移动切换的实现
- 起伏激荡的以太网,抱上这条大腿才能乘风破浪
- 创业者必知的互联网思维之屌丝思维
- (十三) Oracle函数
- C++ 动态创建二维数组