应用技术: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 高清