OpenCV影像開啟、儲存

在做影像處理的時候
常常是連續的影像處理
這時候除了開啟影像檔之外
也要寫入影像

剛讀研究所的時候
都只會用IPL存影像檔
所以網路上看到的程式都從Mat再轉IPL儲存
但後來才發現不用那麼麻煩
重新學起
速度快,Mat也比較方便

highgui裡,就可以方便我們將圖片儲存成視頻

類別裡有構造函數,open、isOpened、write、get等
目前我只有試開過 .avi .m2ts 的影像檔
其他就不知道了

先上程式碼吧~

#include <iostream>
#include <opencv2\opencv.hpp>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
using namespace std;
using namespace cv;
int main()()
{
        char FileName[] = "001.avi";
VideoCapture video(FileName);
Mat videoFrame;


if (!video.isOpened()){
return -1;
}
cout << "Total Frame: " << video.get(CV_CAP_PROP_FRAME_COUNT) << endl;
cout << "FPS: " << video.get(CV_CAP_PROP_FPS) << endl;
while (true){
video >> videoFrame;
imshow("video", videoFrame);
if (videoFrame.empty()){
break;
}
}


使用VideoCapture 就可以開啟影像
這裡假設我們要開啟001.avi的影像檔
isOpened()會回傳值,讓我們知道是否有開啟影像檔案
如果要知道影像的fram 或是 fps 等等之類的
可以使用 .get
CV_CAP_PROP_FRAME_COUNT 這是總共的frame數
CV_CAP_PROP_FPS 這是FPS

因為影像本身就是一張張的圖片連一起而已
所以就是一張張複製給videoFrame顯示出來
使用 >> 就可以給予
一直到影片播放完就結束

如果要儲存的話
使用 VideoWriter
可使用write 或是 <<

但這裡要知道儲存的格式

CV_FOURCC('P', 'I', 'M', '1') = MPEG-1 codec
CV_FOURCC('M', 'J', 'P', 'G') = motion-jpeg codec
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec 
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec 
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec 
CV_FOURCC('U', '2', '6', '3') = H263 codec 
CV_FOURCC('I', '2', '6', '3') = H263I codec 

CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
#include <iostream>
#include <opencv2\core\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\highgui\highgui.hpp>
using namespace std;
using namespace cv;
int main()

{
VideoCapture capture(0);
VideoWriter writer("test.avi", CV_FOURCC('D', 'I', 'V', 'X'), 30.0, cvSize(640, 480));
Mat frame;
while (true)

{
capture >> frame;
imshow("video", frame);
writer << frame;
if (cvWaitKey(20) == 27)
{
break;

}
}

}

這裡錄製錄影機抓到的影像
按ESC可以停止錄製
在建置的專案資料夾即可找到test.avi

沒有留言:

張貼留言

About

努力在程式的大海
用力的揮動雙手
找出屬於自己的航線

Blog Archive

Traffic