前言
近期学习了OpenCV的一些函数 然后配合着函数跟QT的一些UI写一个图像跟视频处理跟摄像头处理的一些功能 但是这个主要的一个框架是学习一个视频的 当时主要讲的是一个OpenCV的视频处理的 UI是仿照一位作者的 然后因为记录确实有点远 找不到了 先声明一下
一、作品展示
图片处理
 
视频处理
 
摄像头处理
 
二、运行的逻辑
先是线程不断循环通过UI传入的图片 视频 进行读取保存 通过我们的PV_Filter将一帧的图片进行一个处理 处理结束之后返回的一帧交还给UI进行显示
 然后要引入OpenCV的库 这个…网上有方法 以前引入的 好像是你只要会图片处理的一些算法 应该也是可以做到不用OpenCV的库也可以处理…不太清楚
三、PV_Filter

首先是PVFilter PVFilter其实就是将QList的所有添加的模式做一个处理  Add就是简单的一个PushBack 
四、PVActionPro 具体函数的处理
人脸识别

X镜像 Y镜像

旋转

灰度图

膨胀

腐蚀

均值滤波
 因为设置成0的时候Bug过 所以就设置了一个限制
边缘检测
 copy一份是因为好像内部输入跟输出的Mat不能相等
亮度与对比度
 value是对比度 value1是亮度 (大概 不然就反过来-。-)
增加RGB值的通道

二值化

五、OpenCV_PV_Thread线程
1.一些声明
 
1.首先是图片的处理
打开图片  run内部的关于图片的处理 
2.然后是视频的一些处理
打开视频 获取FPS是为了在run中Sleep SwitchPlayIcon是为了切换播放的图标显示  视频录制 因为视频录制需要VideoWriter先调用open open需要获取的几个值 路径 fourcc Fps 长宽 以及是否是彩图或灰度图  停止录制  run内部循环的一些视频处理 这边的逻辑是 如果暂停那就停止读取下一帧Mat 如果是Read不到下一帧 那可能是视频播放完毕 处于录制状态要停止录制 如果处于保存一帧图片的情况就用imwrite处理就好 如果是处于录制状态 则需要知道他的开始位置跟结束位置(ui有一个开始跟停止的Slider) 如果存在开始就调到开始 跟计算结束的位置停止录制就好 
3.摄像头的处理
一样是调用Open函数 填数字代表的是你计算机内部的设备(没记错的话)  因为摄影保存的方式个视频保存的方式一样 只是没有一个StartPos 跟 EndPos 所以这边就不贴了 跟上面差不多哦
run里面的一些摄像头处理 
六、最后总结
因为虽然借助线程 但是我写的会在一些函数耗费不少的时间 就会导致看起来很卡顿 如果大家有什么帮助的话请私信我 或是评论 先谢谢大家 Have a good Time,最后补一句 SS 永远的神。
|