應用技術: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 高清