一、videowriter簡介
在OpenCV(開源計算機視覺庫)中,我們可以使用videowriter實現創建和保存視頻文件。videowriter提供了一個簡單的API,可以將視頻數據寫入指定的文件格式中。因此,可以通過它將處理過的視頻數據保存到硬盤中,以便以後使用。
二、創建videowriter對象
在使用videowriter之前,我們需要創建一個videowriter對象。創建videowriter對象的方法如下:
cv::VideoWriter outputVideo;
這裡,我們使用了OpenCV的命名空間cv,並創建了一個名為outputVideo的videowriter對象。
三、設置視頻屬性
在創建videowriter對象後,我們需要設置輸出視頻的屬性。這些屬性包括視頻文件的名稱、幀率、分辨率、顏色空間等。可以通過下面的代碼設置視頻屬性:
cv::VideoWriter outputVideo;
outputVideo.open("output.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), 30, cv::Size(640, 480), true);
上面的代碼中,我們設置了輸出視頻的名稱為“output.avi”,幀率為30幀/秒,分辨率為640×480,顏色空間為彩色。在此示例中,我們使用了MJPG編解碼器,設置圖像質量(參數true)。
四、寫入幀到視頻
一旦設置了videowriter對象的屬性,我們可以開始將幀寫入視頻。將幀寫入視頻的方法如下:
cv::VideoWriter outputVideo;
outputVideo.open("output.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), 30, cv::Size(640, 480), true);
cv::Mat frame;
// 在此讀取幀
outputVideo.write(frame);
在上面的示例中,我們首先創建了一個名為frame的Mat對象。該對象中存儲了一幀圖像的像素值。接下來,我們調用outputVideo.write(frame)方法將該幀寫入到視頻中。
五、釋放資源
寫入視頻流後,我們需要釋放所有與videowriter對象相關的資源以確保所有數據都寫入文件中。釋放資源的方法如下:
cv::VideoWriter outputVideo;
outputVideo.open("output.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), 30, cv::Size(640, 480), true);
while (視頻流不為空) {
cv::Mat frame;
// 在此讀取幀
outputVideo.write(frame);
}
outputVideo.release();
在上述示例中,我們使用while循環將多幀圖像寫入視頻中。在最後一幀寫入後,我們調用outputVideo.release()方法釋放資源。
六、代碼示例
下面是一個完整的示例,其中包括創建videowriter對象、設置視頻屬性、將幀寫入視頻和釋放資源的所有步驟:
#include
#include
using namespace cv;
using namespace std;
int main()
{
VideoCapture cap(0);
if (!cap.isOpened())
{
cout << "無法打開視頻流!" << endl;
return -1;
}
double fps = cap.get(CAP_PROP_FPS);
Size size((int)cap.get(CAP_PROP_FRAME_WIDTH), (int)cap.get(CAP_PROP_FRAME_HEIGHT));
string outputVideoName = "output.avi";
VideoWriter outputVideo;
outputVideo.open(outputVideoName, VideoWriter::fourcc('M', 'J', 'P', 'G'), fps, size, true);
if (!outputVideo.isOpened())
{
cout << "無法創建輸出視頻文件!" << endl;
return -1;
}
Mat frame;
while (cap.read(frame))
{
imshow("視頻流", frame);
outputVideo.write(frame);
if (waitKey(1) == 27)
{
// 退出按鍵ESC
break;
}
}
cap.release();
outputVideo.release();
return 0;
}
七、小結
我們已經詳細了解了OpenCV中的videowriter,包括如何創建videowriter對象、設置視頻屬性、將幀寫入視頻和釋放資源等。通過使用videowriter,我們可以將圖像處理的結果保存到硬盤中以供以後再次使用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/155482.html