使用Matlab直接调用Microview相机接口
注意事项
- 在win10平台上由于Microview相机64位SDK无法使用,因此只能使用32位Matlab,且启动Matlab时需用管理员权限运行
资源文件
- MVCAPI.h
- CommonDataType.h
- MVCAPI.lib
- MVCAPI.dll
- MVParm.dll
- MVBayerDec.dll
源代码
1、初始化相机
基本思路是在内存中保留一块内存区域用于存储和相机有关的配置信息和图像,C接口程序接受Matlab传来的参数,并初始化相机,将相机配置参数存入内存的堆区域,返回值为该内存区域的首地址,转为Int类型输出,Matlab程序只需持有该地址即可。
//mvc_init_camera.cpp
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include "MVCAPI.h"
#include "mex.h"
HANDLE* m_phMVCs;
BYTE* m_pRawDatas[5];
struct CapInfoStruct* m_pCapInfos;
int* pplhs0;
void free_data(int camera_num);
void init_camera(int camera_num, int* pcamera_ids, int* pwidths, int* pheights, int* phOffs, int* pvOffs);
/***
*输入参数:五个行向量,分别是相机标号,每个相机获取图像的宽和高,图像的水平偏置和垂直偏置
*输出参数:n*3 矩阵
* |相机标号1|m_hMVs指针|m_CapInfo指针|
* |相机标号2|m_hMVs指针|m_CapInfo指针|
* ...
***/
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
int camera_num,i;
int camera_ids[6];
int widths[6];
int heights[6];
int hOffs[6];
int vOffs[6];
double *pInputs[5];
//分别相机标号、宽、高、水平偏置、垂直偏置 (都是行向量)
if(nrhs != 5) {
mexErrMsgIdAndTxt("MyToolbox:mvc_init_camera:nrhs",
"Five inputs required.");
}
//输出[相机标号,m_hMVs指针,m_CapInfo指针]
if(nlhs != 1) {
mexErrMsgIdAndTxt("MyToolbox:mvc_init_camera:nlhs",
"One output required.");
}
camera_num = mxGetN(prhs[0]);
for (i=0;i<5;++i){
pInputs[i] = mxGetPr(prhs[i]);
}
for (i=0;i<camera_num;++i){
camera_ids[i] = (int)(pInputs[0][i]);
widths[i] = (int)(pInputs[1][i]);
heights[i] = (int)(pInputs[2][i]);
hOffs[i] = (int)(pInputs[3][i]);
vOffs[i] = (int)(pInputs[4][i]);
mexPrintf(&