Win10 下使用Microview相机SDK进行二次开发

Win10 下使用Microview相机SDK进行二次开发

注意事项

  • Microview SDK是在XP下开发得到,在Win10下编译得到的可执行文件需用管理员权限运行,可以设置为兼容 XP 模式运行,若编译成 dll,那么调用该 dll 的程序需要有管理员权限,比如编译成 mex 文件和 Matlab 混合编程时

  • 亲测SDK64位版本不能用,请使用32位版本

  • 亲测 Microview 号称的通过配置文件控制相机初始化顺序的功能无效,若有人成功了请告知

最简程序

该程序实现一个相机服务端功能,当客户端发来请求时,获取单帧图像并发送给客户端,以下是关键代码

//用到的一些变量
SOCKET m_sock;
SOCKET clientSocket;

HANDLE  m_hMVCs[5];
BYTE*   m_pRawDatas[5];
struct CapInfoStruct m_CapInfos[5];

DWORD   RawDataSize;

int m_height,m_width,m_hOff,m_vOff;
/**
*初始化相机
**/
int CServerNet::InitCamera(){
    int nIndex=0;
    int rt;


    for (nIndex=0;nIndex<CAMERA_NUM;++nIndex){

        m_pRawDatas[nIndex]=(BYTE*)malloc(RawDataSize*sizeof(BYTE));
        memset(m_pRawDatas[nIndex],0,RawDataSize);

        struct CapInfoStruct *m_pCapInfo = &m_CapInfos[nIndex];
        memset(m_pCapInfo, 0, sizeof(CapInfoStruct));
        m_pCapInfo->Buffer = m_pRawDatas[nIndex];

        m_pCapInfo->Height = m_height;
        m_pCapInfo->Width  = m_width;
        m_pCapInfo->HorizontalOffset = m_hOff;
        m_pCapInfo->VerticalOffset   = m_vOff;
        m_pCapInfo->Exposure         = 1024;
        m_pCapInfo->Gain[0]          = 17;
        m_pCapInfo->Gain[1]          = 9;
        m_pCapInfo->Gain[2]          = 15;
        m_pCapInfo->Control          = 0;
        memset(m_pCapInfo->Reserved, 0, 8);
        m_pCapInfo->Reserved[0]    = 3;



        m_hMVCs[nIndex] = 0;
        rt = MV_Usb2Init("MVC1000", &nIndex, m_pCapInfo, &m_hMVCs[nIndex]);
        if(ResSuccess != rt)
        {
            printf("Can not open USB camera!\n");
            MV_Usb2Uninit(&m_hMVCs[nIndex]);
            m_hMVCs[nIndex] = NULL;
            return 1;
        }else{
            MV_Usb2StartCapture(m_hMVCs[nIndex],TRUE);
        }

    }
    return 0;
}
/**
*去初始化相机
*如果不进行去初始化,那么在程序关闭前其他程序都无法使用相机
**/
int CServerNet::UInitCamera(){
    for (int i=0;i<CAMERA_NUM;++i){
        MV_Usb2StartCapture(m_hMVCs[i],FALSE);
        MV_Usb2Uninit(&m_hMVCs[i]);
    }
    return 0;
}
/**
*获取图像并发送给客户端
**/
int CServerNet::TransImage(){
    int iErrMsg;
    printf("Get RawData\n");
    for (int nIndex=0;nIndex<CAMERA_NUM;++nIndex){
        MV_Usb2GetRawData(m_hMVCs[nIndex],&m_CapInfos[nIndex]);
    }
    printf("TransImage start\n");

    for (int nIndex=0;nIndex<CAMERA_NUM;++nIndex){
        iErrMsg = send(clientSocket,(char*)m_pRawDatas[nIndex],m_height*m_width,0);
        if (iErrMsg < 0){
            //发送失败  
            printf("send msg failed with error : %d\n",iErrMsg);
            return 1;
        }

    }
    printf("TransImage finish\n");
    return 0;
}
发布了22 篇原创文章 · 获赞 21 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/liucc09/article/details/51218308