OpenCV學習筆記(12)OpenCV調用Matlab函數進行保存視頻的嘗試
来源:互联网 发布:那个约会软件免费 编辑:程序博客网 时间:2024/06/05 18:27
http://blog.csdn.net/chenyusiyuan/article/details/5628813
OpenCV2.1 的 ffmpeg 似乎編譯有問題,不能正常進行視頻讀寫方面的操作,因此嘗試調用 Matlab 來完成,不過也還沒成功,詳細記錄如下:
1、在 Matlab 中通過 mex –setup 和 mbuild –setup 指定 VS2008 SP1 作為 C 編譯器。
2、編寫保存視頻的 fun_saveVideo.m 文件如下:
- function fun_saveVideo(img, fps, flag)
- if flag == 0
- mov = avifile('disp.avi','compression','Indeo5','fps',fps,'quality',90);
- end
- if flag == 1
- mov = addframe(mov,img);
- end
- if flag == 2
- mov = close(mov);
- end
3、使用如下指令將 fun_saveVideo.m 編譯為 動態鏈接庫 供 VC 調用:
- mcc -W cpplib:libSaveVideo -T link:lib fun_saveVideo.m
4、將生成的 libSaveVideo.h, libSaveVideo.lib, libSaveVideo.dll 三個文件復制到項目文件夾下,其中 lib 和 dll 文件復制到 debug 和 release 子文件夾內。
5、在 VS 界面 " /Tools / Options / Projects and Solutions / VC++ Directories" 中,在 " Include files " 和 " Library files " 中分別添加下列目錄(默認安裝位置):
- " D:/MATLAB_R2009a/extern/include "
- " D:/MATLAB_R2009a/extern/lib/win32/microsoft "
6、在項目屬性" /Project / Properties / Configuration Properties / Linker / Input " 中添加 mclmcrrt.lib, libmx.lib, libmat.lib, mclmcr.lib 。
7、在項目的 Solution Explorer 的 Header Files 中添加 libSaveVideo.h ,在該文件的最下面可以看到函數的聲明:
- extern LIB_libSaveVideo_CPP_API void MW_CALL_CONV fun_saveVideo(const mwArray& img
- , const mwArray& fps
- , const mwArray& flag);
8、在 ******(項目名稱).h 中加入如下代碼(如果不加 『#pragma comment(lib,』」libSaveVideo」)』,則編譯鏈接時會出現錯誤「error LNK2019: unresolved external symbol」):
- #pragma once
- #pragma comment(lib,"libSaveVideo.lib") // new add
- #ifndef __AFXWIN_H__
- #error "include 'stdafx.h' before including this file for PCH"
- #endif
- #include "resource.h" // main symbols
- #include "cxcore.h"
- #include "cv.h"
- #include "highgui.h"
- #include "camerads.h"
- #include "mclmcr.h" // new add
- #include "matrix.h" // new add
- #include "mclcppclass.h" // new add
- #include "libSaveVideo.h" // new add
- ...
- ...
9、函數調用的具體代碼:
- // 初始化Matlab生成的saveVideo函數
- libSaveVideoInitialize();
- double fps =10, flag = 0;
- mwSize dims[3];
- dims[0] = img_size.height; dims[1] = img_size.width; dims[2] = 3;
- int len = img_size.height * img_size.width *3;
- mwArray mwfps(1, 1, mxDOUBLE_CLASS);
- mwArray mwflag(1, 1, mxDOUBLE_CLASS);
- mwArray mwdisp( 3, dims, mxUINT8_CLASS, mxREAL);
- mwfps.SetData(&fps, 1);
- mwflag.SetData(&flag, 1);
- ...
- while(...)
- {
- ...
- if (saveVideo)
- {
- IplImage* dispT = cvCreateImage(cvSize(img_size.height, img_size.width), CV_8UC3, 3);
- cvTranspose(tmp_img1, dispT);
- mwdisp.SetData((double*)tmp_img1->imageData, len);
- if (flag==0)
- {
- fun_saveVideo(mwdisp, mwfps, mwflag);
- flag = 1;
- }
- else
- {
- fun_saveVideo(mwdisp, mwfps, mwflag);
- }
- cvReleaseImage(&dispT);
- }
- ...
- }
- // 結束保存視頻
- flag = 2;
- fun_saveVideo(mwdisp, mwfps, mwflag);
- libSaveVideoTerminate();
- mclTerminateApplication();
10、編譯鏈接都通過,但實際運行時出錯,可能是 m 文件編寫不合理 或其它原因,有待進一步分析。
- OpenCV學習筆記(12)OpenCV調用Matlab函數進行保存視頻的嘗試
- OpenCV学习笔记(12)OpenCV调用Matlab函数进行保存视频的尝试
- OpenCV學習筆記(4)視頻文件的讀取與保存(2010-01-23 更新)
- 如何将opencv的处理结果保存由matlab分析
- 如何将opencv的处理结果保存由matlab分析
- matlab+opencv
- Opencv C++数据结构的保存
- matlab调用opencv的函数
- matlab的数据类型 对比 OpenCV
- Opencv 和Matlab的不同
- matlab调用opencv的函数
- 将matlab的数据保存xml 在c++下通过opencv读取;
- opencv打开matlab保存的txt文件,并赋值为Mat矩阵
- 怎么把matlab 训练的model 保存下来 然后在opencv 中调用
- 将opengl的绘制效果利用OpenCV、Matlab保存成图片
- opencv 与matlab 批量读取并保存图片
- opencv中视频的保存(两个版本的)
- OpenCV学习笔记(4)视频文件的读取与保存
- OpenCV學習筆記(9)利用MFC的Picture控件顯示圖像+播放視頻和捕獲攝像頭畫面
- modern c 8.1 编程题
- stm32f1的IO,推挽与开漏
- OpenCV學習筆記(10)CvMat 與 STL vector 的格式轉換與數據讀寫
- OpenCV學習筆記(11)OpenCV+MFC的雙目視覺測距與景深實現 之 問題探討
- OpenCV學習筆記(12)OpenCV調用Matlab函數進行保存視頻的嘗試
- 数据库分页
- OpenCV學習筆記(13)基於OpenCV2.1的MFC雙目視覺平台構建
- Hibernate持久化对象的状态
- OpenCV學習筆記(14)利用Matlab查看雙目視覺景深效果
- OpenCV學習筆記(15)使用OpenGL顯示雙目視覺三維重構效果
- TCP/IP三次握手协议
- 如何运营和推广资讯类网站
- OpenCV學習筆記(16)雙目測距與三維重建的OpenCV實現問題集錦(一)圖像獲取與單目定標