常常是連續的影像處理
這時候除了開啟影像檔之外
也要寫入影像
剛讀研究所的時候
都只會用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('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
這裡假設我們要開啟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 codecCV_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
沒有留言:
張貼留言