1.实现功能
创建一个写入对象,将视频帧一次输入到一个视频文件中并转换为对极数坐标视频。
2.代码实现
void Example7(int argc, char ** argv)
{
cv::namedWindow("Example7_1", cv::WINDOW_AUTOSIZE);
cv::namedWindow("Example7_2", cv::WINDOW_AUTOSIZE);
//获取视频
cv::VideoCapture capture(argv[1]);
//获取帧率
double fps = capture.get(cv::CAP_PROP_FPS);
//获取宽高
cv::Size size(
(int)capture.get(cv::CAP_PROP_FRAME_WIDTH),
(int)capture.get(cv::CAP_PROP_FRAME_HEIGHT)
);
cv::VideoWriter writer;
//参数一:输出文件名;参数二:编码方式;参数三:帧率;参数四:单帧图像分辨率
writer.open(argv[2], CV_FOURCC('M', 'J', 'P', 'G'), fps, size);
cv::Mat logpolar_frame, bgr_frame;
for (;;) {
capture >> bgr_frame;
if (bgr_frame.empty())break;
cv::imshow("Example7_1", bgr_frame);
//将视频转化为对极数视频
cv::logPolar(
bgr_frame,
logpolar_frame,
cv::Point2f(
bgr_frame.cols / 2,
bgr_frame.rows / 2
),
40,
cv::WARP_FILL_OUTLIERS
);
cv::imshow("Example7_2", logpolar_frame);
//写入新的视频文件
writer << logpolar_frame;
char c = cv::waitKey(10);
if (c == 27)break;
}
capture.release();
}
3.运行结果
本文参考书目:
《学习OpenCV3(中文版)》[美] 安德里安·凯勒、加里·布拉德斯基 著 , 阿丘科技、刘昌祥、吴雨培、王成龙、崔玉芳 等译,清华大学出版社。