当前位置: 首页 > java >正文

基于Qt和OpenCV的图片与视频编辑器

应用技术:Qt C++、OpenCV、多线程、单例模式,qss样式表、OpenGL、ffmpeg。 本项目为Qt mingw6.5.3版本,QtCreator编写运行。 

void XVideoWidget::do_setImage(cv::Mat mat)
{QImage::Format fmt = QImage::Format_RGB888;int pixSize = 3;//处理后是灰度图if (mat.type() == CV_8UC1) {fmt = QImage::Format_Grayscale8;pixSize = 1;}//RGB图if (img.isNull() || img.format() != fmt) {  //灰度图后,设置回rgb图delete img.bits();uchar* buf = new uchar[width() / 4 * 4  * height() / 4 * 4 * pixSize];//img为显示窗口大小(要4的倍数)img = QImage(buf, width() / 4 * 4, height() / 4 * 4, fmt);}//拷贝img大小的Matcv::Mat des;cv::resize(mat, des, cv::Size(img.size().width(), img.size().height()));//设置图像颜色格式if (pixSize > 1) {cv::cvtColor(des, des, cv::COLOR_BGR2RGB);}//复制内存空间memcpy(img.bits(), des.data, des.cols * des.rows * des.elemSize());update();
}
void XVideoThread::run()
{cv::Mat mat1;for (;;) {mutex.lock();if (isExit) {mutex.unlock();//析构的时候退出break;}//判断视频是否打开if (!cap1.isOpened()) {mutex.unlock();msleep(5);continue;}if (!isPlay) { //暂停状态mutex.unlock();msleep(5);continue;}//读取一帧视频,解码,颜色转换int cur = cap1.get(cv::CAP_PROP_POS_FRAMES); //获取当前帧数if ((endPos > 0 && cur >= endPos) || !cap1.read(mat1) || mat1.empty()) {mutex.unlock();//导出在结尾位置,停止导出if(isWrite) {   //正在导出视频stopSave();emit sigSaveEnd();}msleep(5);continue;}cv::Mat mat2 = mark;//视频融合if (cap2.isOpened()) {cap2.read(mat2);}//非导出状态下,显示原图像if (!isWrite) {emit sigViewImage1(mat1);if (!mat2.empty()) {emit sigViewImage2(mat2);}}//通过过滤器处理cv::Mat des = XFilter::getInstance()->fFilter(mat1, mat2);//非导出状态下,显示生成后图像if (!isWrite) {emit sigViewDes(des);}int s = 0;s = 850 / fps; //根据fps设置视频播放速度if (isWrite) { //导出视频时,不需要fpss = 1;vw.write(des);}msleep(s);mutex.unlock();}
}

项目描述:可分别对图片和对视频进行编辑。对图片的编辑功能包括:亮度,对比度,滤波,二值化,边缘检测,缩放,旋转,尺寸修改,图片转base64,base64转图片,保存图片。对 视频的编辑功能包括:视频播放和停止,亮度,对比度,视频导出,视频旋转,镜像,尺寸调整,二值化,添加水印,视频合并,视频融合,视频和音频剪辑。qss手动改变编 辑器的颜色样式。 主要工作:用两个界面分别实现图片处理和视频处理,主要运用OpenCV的函数对图片进行各种处理。大部分处理选择同一个滑动条控制参数,用qss设置了多种界面样式。 视频编辑中,OpenCV读取原视频的每一帧实现视频播放,并采用了多线程,子线程采用单例模式,通过加互斥锁保证线程安全。在视频播放的子线程中根据fps调整速度,读取 视频每一帧在OpenGL Widget上显示,滑动控制视频播放。 对视频的图像处理操作为采用OpenCV的函数,对视频的每一帧进行处理,主界面再获取每一帧,播放处理后的视频。

基于Qt和OpenCV的图片与视频编辑器_720P 高清

http://www.xdnf.cn/news/16173.html

相关文章:

  • 从0到1学习c++ 命名空间
  • Hive常用函数
  • GitHub Actions打包容器,推送 AWS ECR 并使 EKS 自动拉取以完成发版部署
  • [ComfyUI] --ComfyUI 是什么?比 Stable Diffusion WebUI 强在哪?
  • Linux Wlan 无线网络驱动开发-scan协议全流程详解
  • QT开发---字符编码与QString和QByteArray
  • 深度分析Java内存回收机制
  • 基于深度学习的图像分类:使用EfficientNet实现高效分类
  • RocketMQ搭建及测试(Windows环境)
  • 大模型处理私有数据的核心技术
  • 【News】同为科技亮相首届气象经济博览会
  • Django Models详解:数据库模型的核心
  • 第二十七章 W55MH32 Interrupt示例
  • go语言基础教程:【1】基础语法:变量
  • 爬虫基础概念
  • 数学基础弱能学好大数据技术吗?
  • Kubernetes 集群架构和Pod创建流程
  • tcp基础协议
  • 字节的机器人模型 GR-3
  • 高可用架构模式——如何应对接口级的故障
  • uni-app支付宝小程序样式穿透失效
  • C51:用DS18B20传感器读取温度
  • 如何将拥有的域名自定义链接到我的世界服务器(Minecraft服务器)
  • 【Rust线程】Rust高并发编程之线程原理解析与应用实战
  • 【unity游戏开发入门到精通——组件篇】unity的粒子系统力场 (Particle System Force Field)实现如旋风、吸引力、风吹效果等
  • 数据库垂直拆分和水平拆分
  • 【​I2S:芯片设计中的“音频桥梁”​】
  • Android Service 全解析:从基础原理到实战优化
  • Windows11 本地安装docker Desktop 部署dify 拉取镜像报错
  • 【DataWhale】快乐学习大模型 | 202507,Task06笔记