Opencv將處理后的視頻保存出現的問題

問題描述:
代碼運行過程中,imshow出來的每幀的效果圖是正確的,但是按照網上的方法保存下來卻是0kb,打開不了。
參考的網上的一些方法,均是失敗的,具體原因我也不清楚:
1、例如我這樣設置,會報這樣的錯:
錯誤
2、后來經過查找,這種表示方法更換成:

int outCompressCodec = CAP_OPENCV_MJPEG;// 設置要保存視頻的格式。

這回不報錯了,但是產生的視頻文件仍然是為0kb;
3、
設置為和輸入視頻一樣的格式:

int outCompressCodec = capture.get(CAP_PROP_FOURCC);

不報錯,但是產生的視頻文件仍然是為0kb;
4、還有不知道是那種操作,導致這樣的提示:
程序運行的過程中面板上彈出的錯誤是:這個應該是涉及到編碼與解碼的庫,但老實說不需要下載相關庫,自帶的也可以實現我所需要的功能的。

[ INFO:0] VIDEOIO: Enabled backends(5, sorted by priority): FFMPEG(1000); MSMF(990); DSHOW(980); CV_IMAGES(970); CV_MJPEG(960)Failed to load OpenH264 library: openh264-1.8.0-win64.dllPlease check environment and/or download library: https://github.com/cisco/openh264/releases[libopenh264 @ 00000232d8d77f00] Incorrect library version loaded
Could not open codec 'libopenh264': Unspecified error

5、最后發現原來按照CAP_OPENCV_MJPEG設置的話,輸出的視頻必須為MP4格式,我還傻逼呼呼地用avi格式,最終結果很好!!

這是我寫的代碼:(將avi輸出為MP4)

#include <opencv2/opencv.hpp>
#include "opencv2/features2d.hpp"
#include<opencv2/highgui.hpp>
#include <iostream>
#include "windows.h"
#include <stdio.h>
#include <time.h>
#include <math.h>  
#include "My_ImageProssing_base.h"
#define WINDOW_NAME "【程序窗口】"			
using namespace cv;
using namespace std;
//RNG g_rng(12345);//失敗//對視頻進行動漫化一般需要四個步驟
//1、邊緣檢測
//2、將邊緣檢測得到的邊緣 以黑色的形式貼在原來的畫上。
//3、對貼了邊緣的圖進行雙邊濾波,雙邊濾波可以較好的濾波的同時保留邊緣。
//4、修改圖像的顏色的飽和度,本文采用的是將RGB轉化為HSV空間,然后調整S分量。//*--------------------------【全局變量聲明】-------------------------------------*/
int g_nThresholdValue = 71;	//canny參數值
int g_nkernelValue = 21;	//雙邊濾波核大小
int g_nS = 248;	//
Mat g_srcImage, g_grayImage,g_cannyImage,g_dstImage;void H_mul_k(Mat* srcImage, Mat* dstImage, float k)
{int height = (*srcImage).rows;int width = (*srcImage).cols;for (int j = 0; j < height; j++){for (int i = 0; i < width; i++){int zhi = (*srcImage).at<uchar>(j, i) * k;if (zhi >= 255) zhi = 255;else if (zhi <= 0) zhi = 0;else zhi = zhi;(*dstImage).at<uchar>(j, i) = zhi;}}
}
int main(int argc, char* argv[])
{Point pt1, pt2;Mat g_srcImage;cv::VideoCapture capture("D:\\opencv_picture_test\\毛概期中作業\\路上風景.avi");//關聯讀入視頻文件if (!capture.isOpened()) {std::cout << "fail to load video";return 1;}/*獲取視頻fps*/double rate = capture.get(CAP_PROP_FPS);/*獲取視頻幀的尺寸*/int width = capture.get(CAP_PROP_FRAME_WIDTH);int height = capture.get(CAP_PROP_FRAME_HEIGHT);// 獲取當前視頻的編碼格式,輸出的視頻要和輸入視頻編碼相同才可以保存。//int outCompressCodec = capture.get(CAP_PROP_FOURCC);int outCompressCodec = CAP_OPENCV_MJPEG;// 設置要保存視頻的格式。cout << outCompressCodec << endl;/*根據打開視頻的參數初始化輸出視頻格式*///D:\\opencv_picture_test\\毛概期中作業\\re_video.avicv::VideoWriter w_cap("D:\\opencv_picture_test\\毛概期中作業\\re_video.mp4", outCompressCodec, rate, cv::Size(width, height),true);/*自定義輸出視頻的尺寸,需要將讀取的視頻幀尺寸進行變換,下文使用的resize函數完成*///cv::VideoWriter w_cap("re_video.avi", outCompressCodec, rate, cv::Size(width,height));/*循環讀取視頻的幀*/while (capture.read(g_srcImage)) {/****************************************************************************************************************************//*對讀取的視頻幀進行處理*/g_grayImage.create(g_srcImage.size(), g_srcImage.type());		//創建一個同大小類型的矩陣cvtColor(g_srcImage, g_grayImage, COLOR_BGR2GRAY);//imshow("【原圖的灰度圖】", g_grayImage);//進行均值濾波操作blur(g_grayImage, g_grayImage, Size(3, 3));//【4】創建滑動條來控制閾值//【1】運行canny算子Canny(g_grayImage, g_cannyImage, g_nThresholdValue, g_nThresholdValue / 3, 3);cv::Mat g_canny3Image(g_srcImage.rows, g_srcImage.cols, CV_8UC3, cv::Scalar(0, 0, 0));//【2】貼圖//將canny圖反轉(將邊緣變為黑色)Mat change_g_cannyImage;//change_g_cannyImage = g_cannyImage < 100;		//非邊緣轉化為255,邊緣轉化為0;非邊緣會在之后的處理會變為透明,而邊緣則會保持原有的數據0change_g_cannyImage = 255 - g_cannyImage;//將單通道轉化為三通道cvtColor(change_g_cannyImage, g_canny3Image, COLOR_GRAY2BGR);//image.copyTo(imageROI,mask), 作用是把mask和image重疊以后把mask中像素值為0(black)的點對應的image中的點變為透明,而保留其他點。Mat bianyuan_dst;g_srcImage.copyTo(bianyuan_dst, g_canny3Image);//【3】雙邊濾波Mat lvbo_dst;bilateralFilter(bianyuan_dst, lvbo_dst, g_nkernelValue, g_nkernelValue * 2, g_nkernelValue / 2);//【4】修改圖像的顏色的飽和度Mat hsv_image, hsv_dst;cvtColor(lvbo_dst, hsv_image, COLOR_BGR2HSV);vector<Mat> channels;split(hsv_image, channels);Mat S_Mat;float k = g_nS * 1.0f / 100;channels.at(1).copyTo(S_Mat);cv::Mat S_dst(S_Mat.rows, S_Mat.cols, CV_8UC1, cv::Scalar(0));//S_dst = S_Mat * k;H_mul_k(&S_Mat, &S_dst, k);//將修改后的S與原來的H,V進行mergechannels[1] = S_dst.clone();	//深復制merge(channels, hsv_dst);//將修改后的HSV轉為RGB圖Mat RGB_dst;cvtColor(hsv_dst, RGB_dst, COLOR_HSV2BGR);/****************************************************************************************************************************//*保存處理后的幀為視頻*/w_cap.write(RGB_dst);//這里我們不展示//imshow("src", RGB_dst);if (waitKey(10)=='q'){break;}}capture.release();cout << "處理好了" << endl;return 0;
}

參考鏈接們:

opencv視頻讀取與幀處理后保存為視頻的方法
利用opencv加快視頻播放速度,并保存avi視頻文件
opencv4.0.0里面CV_FOURCC找不到標識符
opencv VideoWriter保存視頻失敗原因
opencv視頻保存
OpenCV視頻寫入詳解_Python,視頻保存0kb問題
解決c++ - openh264 - bEnableFrameSkip=0, bitrate can’t be controlled
常見的視頻格式以及視頻編解碼標準(附帶OpenCV實現視頻的讀取與保存)

十分感謝上面的鏈接!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378513.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378513.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378513.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java Number shortValue()方法與示例

Number類shortValue()方法 (Number Class shortValue() method) shortValue() method is available in java.lang package. shortValue()方法在java.lang包中可用。 shortValue() method is used to return the value denoted by this Number object converted to type short (…

MATLAB可以打開gms文件嗎,gms文件擴展名,gms文件怎么打開?

.gms文件類型&#xff1a;Gesture and Motion Signal File擴展名為.gms的文件是一個數據文件。文件說明&#xff1a;Low-level, binary, minimal but generic format used to organize and store Gesture and Motion Signals in a flexible and optimized way; gesture-related…

黑白圖片顏色反轉并保存

將圖像的黑白顏色反轉并保存 import cv2 # opencv讀取圖像 img cv2.imread(rE:\Python-workspace\OpenCV\OpenCV/YY.png, 1) cv2.imshow(img, img) img_shape img.shape # 圖像大小(565, 650, 3) print(img_shape) h img_shape[0] w img_shape[1] # 彩色圖像轉換為灰度圖…

家貓WEB系統

現在只放源碼在些.為它寫應用很簡單有空整理文檔演示地址:jiamaocode.com/os/ 源碼&#xff1a;http://jiamaocode.com/ProCts/2011/04/14/1918/1918.html轉載于:https://www.cnblogs.com/jiamao/archive/2011/04/16/2018339.html

C# DataRow數組轉換為DataTable

public DataTable ToDataTable(DataRow[] rows) { if (rows null || rows.Length 0) return null; DataTable tmp rows[0].Table.Clone(); // 復制DataRow的表結構 foreach (DataRow row in rows) tmp.Rows.Add(row); // 將DataRow添加…

plesk 運行不了php,如何在Plesk中使用composer(使用其他版本的PHP運行Composer)

對于基于Plesk的服務器, composer的默認安裝將使用系統安裝的PHP版本, 而不使用Plesk所安裝的任何版本。盡管Composer至少需要PHP 5.3.2, 但是當你嘗試在需要特定版本PHP的項目中安裝依賴項時, 就會出現問題。例如, 如果你有一個至少需要PHP 7.2的項目, 并且系統的默認PHP安裝是…

Java Calendar hashCode()方法與示例

日歷類hashCode()方法 (Calendar Class hashCode() method) hashCode() method is available in java.util package. hashCode()方法在java.util包中可用。 hashCode() method is used to retrieve the hash code value of this Calendar. hashCode()方法用于檢索此Calendar的哈…

Error: Flash Download failed - Target DLL has been cancelled

博主聯系方式: QQ:1540984562 QQ交流群:892023501 群里會有往屆的smarters和電賽選手,群里也會不時分享一些有用的資料,有問題可以在群里多問問。 由于換了新電腦,keil重裝了下,然而之前的MCU的支持包沒有安裝,以及一些其他的問題,導致可以編譯但是不能將程序燒錄到單片…

設計一個較為合理的實驗方案來研究芳綸纖維的染色熱力學性能

請你設計一個較為合理的實驗方案來研究芳綸纖維的染色熱力學性能?包括吸附等溫線、親和力、染色熱和染色熵的測定,并指出實驗中應注意哪些事項來減少實驗誤差? 標準答案: 染色熱力學理論研究染色平衡問題。研究染色熱力學性能:首先研究選擇適宜的染料 吸附等溫線類型測定…

我也談委托與事件

雖然在博客園里面已經有很多關于C#委托和事件的文章&#xff0c;但是為了自己在學習的過程中&#xff0c;加深對委托的理解&#xff0c;我還是決定寫一下自己的心得體會。以備他日在回來復習。委托&#xff08;delegate&#xff09;是一個類&#xff0c;但是這個類在聲明的時候…

php錯誤攔截機制,php攔截異常怎么寫-PHP問題

php攔截異常可以通過PHP的錯誤、異常機制及其內建數set_exception_handler、set_error_handler、register_shutdown_function 來寫。首先我們定義錯誤攔截類&#xff0c;該類用于將錯誤、異常攔截下來&#xff0c;用我們自己定義的處理方式進行處理&#xff0c;該類放在文件名為…

智能車復工日記【4】:關于圖像的上下位機的調整問題總結

系列文章 【智能車Code review】—曲率計算、最小二乘法擬合 【智能車Code review】——坡道圖像與控制處理 【智能車Code review】——拐點的尋找 【智能車Code review】——小S與中S道路判斷 【智能車Code review】——環島的判定與補線操作 智能車復工日記【1】——菜單索引…

設計合理的實驗方案來研究陽離子改性棉織物與未改性棉的染色動力學性能

染色動力學性能研究染色的什么問題?設計合理的實驗方案來研究陽離子改性棉織物與未改性棉的染色動力學性能?并指出如何計算反映染色動力學的主要參數? 標準答案: 染色動力學研究染色速率問題。 為了研究陽離子改性棉纖維及未改性棉纖維對活性染料染色動力學性能,首先要測…

Java ArrayList toArray()方法及示例

ArrayList類的toArray()方法 (ArrayList Class toArray() method) Syntax: 句法&#xff1a; public Object[] toArray();public T[] toArray(T[] elements);toArray() method is available in java.util package. toArray()方法在java.util包中可用。 toArray() method is us…

小練習:新聞網站、SNS網站圖片播放器jQuery版

新聞網站和sns網站常見的圖片瀏覽器。直接看效果吧&#xff0c;效果預覽&#xff1a;http://u.vps168.com.cn/cos2004/photoView/&#xff0c; ie7、ie8、ff預覽正常&#xff0c;ie6和chrome預覽有一點小問題&#xff0c;研究中 作者&#xff1a;綠色花園 出處&#xff1a;htt…

SQL SERVER的鎖機制(四)——概述(各種事務隔離級別發生的影響)

SQL SERVER的鎖機制&#xff08;一&#xff09;——概述&#xff08;鎖的種類與范圍&#xff09; SQL SERVER的鎖機制&#xff08;二&#xff09;——概述&#xff08;鎖的兼容性與可以鎖定的資源&#xff09; 本文上接SQL SERVER的鎖機制&#xff08;三&#xff09;——概述&a…

如何測定拼色染液中,各染料在不同染色時間時,染液中殘留染料量及織物上吸附上染的染料量?

如何測定拼色染液中,各染料在不同染色時間時,染液中殘留染料量及織物上吸附上染的染料量? 標準答案: 通常依據各染料對特定波長光的吸光度具有加和性;吸光度值符合朗伯比爾定律,吸光度與濃度成正比;吸光度值分光光度計可以讀出;通過聯立方程,可以求出拼色各染料在染液中…

oracle云數據庫 免費的嗎,使用免費的Oracle云服務-創建ATP數據庫

前面我們講了在Oracle的云主機安裝數據庫&#xff0c;雖然現在安裝數據庫已經很簡單了&#xff0c;但是真正要在生產環境使用&#xff0c;還是需要進行很多配置和優化的&#xff0c;這通常需要專業的人員。而ATP(自治事務性數據庫服務)正是Oracle云提供的非常強大的數據庫云服務…

golang判斷結構體為空_如何在Golang中檢查結構是否為空?

golang判斷結構體為空The size of an empty structure is zero in Golang. Here, empty structure means, there is no field in the structure. 在Golang中&#xff0c; 空結構的大小為零。 在此&#xff0c; 空結構表示該結構中沒有字段。 Eg: 例如&#xff1a; Type struc…

智能車復工日記【5】:起跑線的識別與車庫入庫

博主聯系方式: QQ:1540984562 QQ交流群:892023501 群里會有往屆的smarters和電賽選手,群里也會不時分享一些有用的資料,有問題可以在群里多問問。 系列文章 【智能車Code review】—曲率計算、最小二乘法擬合 【智能車Code review】——坡道圖像與控制處理 【智能車Code re…