大恒相机

原文:https://blog.csdn.net/ZXOO00/article/details/85933197

1、材料

 Opencv2.4.9已在VS2013中安装,1.1和1.2是已安装opencv计算机的状态:

1.1计算机配置Opencv时环境变量(x86对应32位编译器,X64对应64位编译器,

配置opencv时我两个都加了,这其实是多余的,也可以只选一个,这个对后面安装摄像头的X64还是X86的的lib有用):

C:\Program Files (x86)\openocd\0.6.0\bin;F:\opencv\build\x64\vc12\bin;F:\opencv\build\x86\vc12\bin

1.2 opencv在VS13的

(1)工程包含(include)目录配置。(2)工程库(lib)目录

(1)中内容:

(2)中内容(上面1.1中的环境变量配置了X64和X86下的bin,而下图的库目录里面选的是X64的话,则X86作废了,则在接下来的配置中摄像头lib就选X64,就像我的一样,如果你选了X86,则在接下来的配置中摄像头lib就选X86):

1.3 MER-1070-14UR3的SDK包,大恒图像官网有下载安装,在安装目录下有:


    上图中1有inc目录,2中也有inc和lib目录。

2、摄像头SDK在VS中的安装

 2.1在包含目录添加1.3图中1和2的inc(也就是说VC SDK和C++ SDK的inc都添加了),然后点确定-应用-确定


2.2 摄像头lib目录配置,在库目录添加1.3图中1和2的lib\x??(也就是说VC SDK和C++ SDK的lib都添加了),然后点确定-应用-确定


2.3 链接库的配置


3 建立C++工程

3.1加入头文件(这个头文件在VC SDK的inc中)


3.2 加入源.cpp代码

    #include "GxIAPI.h"  
#include "DxImageProc.h"  
#include <opencv2/core/core.hpp>  
#include <opencv2/imgproc/imgproc.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#include <iostream>  
 
using namespace std;
using namespace cv;
 
GX_DEV_HANDLE       m_hDevice;              ///< 设备句柄  
BYTE                *m_pBufferRaw;          ///< 原始图像数据  
BYTE                *m_pBufferRGB;          ///< RGB图像数据,用于显示和保存bmp图像  
int64_t             m_nImageHeight;         ///< 原始图像高  
int64_t             m_nImageWidth;          ///< 原始图像宽  
int64_t             m_nPayLoadSize;
int64_t             m_nPixelColorFilter;    ///< Bayer格式  
Mat test;
//图像回调处理函数  
static void GX_STDC OnFrameCallbackFun(GX_FRAME_CALLBACK_PARAM* pFrame)
{
    //PrepareForShowImg();  
    if (pFrame->status == 0)
    {
        //对图像进行某些操作  
        /*memcpy(m_pBufferRaw, pFrame->pImgBuf, pFrame->nImgSize);
        // 黑白相机需要翻转数据后显示
        for (int i = 0; i <m_nImageHeight; i++)      {
        memcpy(m_pImageBuffer + i*m_nImageWidth, m_pBufferRaw + (m_nImageHeight - i - 1)*m_nImageWidth, (size_t)m_nImageWidth);
        }
        IplImage* src;
        src = cvCreateImage(cvSize(m_nImageWidth, m_nImageHeight), 8, 1);
        src->imageData = (char*)m_pImageBuffer;
        cvSaveImage("src.jpg", src);*/
        memcpy(m_pBufferRaw, pFrame->pImgBuf, pFrame->nImgSize);
 
        // RGB转换  
        DxRaw8toRGB24(m_pBufferRaw
            , m_pBufferRGB
            , (VxUint32)(m_nImageWidth)
            , (VxUint32)(m_nImageHeight)
            , RAW2RGB_NEIGHBOUR
            , DX_PIXEL_COLOR_FILTER(m_nPixelColorFilter)
            , false);
        //  cv_Image->imageData = (char*)m_pBufferRGB;  
 
        //  cvSaveImage("./test.bmp", cv_Image);  
 
        //test.data = m_pBufferRaw;  
        memcpy(test.data, m_pBufferRGB, m_nImageWidth*m_nImageHeight * 3);
        imwrite("./test1.bmp", test);
        namedWindow("test");
        imshow("test", test);
        waitKey(15);
 
    }
    return;
}
 
int main(int argc, char* argv[])
{
    GX_STATUS emStatus = GX_STATUS_SUCCESS;
    GX_OPEN_PARAM openParam;
    uint32_t      nDeviceNum = 0;
    openParam.accessMode = GX_ACCESS_EXCLUSIVE;
    openParam.openMode = GX_OPEN_INDEX;
    openParam.pszContent = "1";
    // 初始化库   
    emStatus = GXInitLib();
    if (emStatus != GX_STATUS_SUCCESS)
    {
        return 0;
    }
    // 枚举设备列表  
    emStatus = GXUpdateDeviceList(&nDeviceNum, 1000);
    if ((emStatus != GX_STATUS_SUCCESS) || (nDeviceNum <= 0))
    {
        return 0;
    }
    //打开设备  
    emStatus = GXOpenDevice(&openParam, &m_hDevice);
    //设置采集模式连续采集  
    emStatus = GXSetEnum(m_hDevice, GX_ENUM_ACQUISITION_MODE, GX_ACQ_MODE_CONTINUOUS);
    emStatus = GXSetInt(m_hDevice, GX_INT_ACQUISITION_SPEED_LEVEL, 1);
    emStatus = GXSetEnum(m_hDevice, GX_ENUM_BALANCE_WHITE_AUTO, GX_BALANCE_WHITE_AUTO_CONTINUOUS);
    bool      bColorFliter = false;
    // 获取图像大小  
    emStatus = GXGetInt(m_hDevice, GX_INT_PAYLOAD_SIZE, &m_nPayLoadSize);
    // 获取宽度  
    emStatus = GXGetInt(m_hDevice, GX_INT_WIDTH, &m_nImageWidth);
    // 获取高度  
    emStatus = GXGetInt(m_hDevice, GX_INT_HEIGHT, &m_nImageHeight);
    test.create(m_nImageHeight, m_nImageWidth, CV_8UC3);
    //判断相机是否支持bayer格式  
    bool m_bColorFilter;
    emStatus = GXIsImplemented(m_hDevice, GX_ENUM_PIXEL_COLOR_FILTER, &m_bColorFilter);
    if (m_bColorFilter)
    {
        emStatus = GXGetEnum(m_hDevice, GX_ENUM_PIXEL_COLOR_FILTER, &m_nPixelColorFilter);
    }
    m_pBufferRGB = new BYTE[(size_t)(m_nImageWidth * m_nImageHeight * 3)];
    if (m_pBufferRGB == NULL)
    {
        return false;
    }
    //为存储原始图像数据申请空间  
    m_pBufferRaw = new BYTE[(size_t)m_nPayLoadSize];
    if (m_pBufferRaw == NULL)
    {
        delete[]m_pBufferRGB;
        m_pBufferRGB = NULL;
        return false;
    }
    //注册图像处理回调函数  
    emStatus = GXRegisterCaptureCallback(m_hDevice, NULL, OnFrameCallbackFun);
    //发送开采命令  
    emStatus = GXSendCommand(m_hDevice, GX_COMMAND_ACQUISITION_START);
    //---------------------  
    //  
    //在这个区间图像会通过OnFrameCallbackFun接口返给用户  
    Sleep(100000);
    //  
    //---------------------  
    //发送停采命令  
    emStatus = GXSendCommand(m_hDevice, GX_COMMAND_ACQUISITION_STOP);
    //注销采集回调  
    emStatus = GXUnregisterCaptureCallback(m_hDevice);
    if (m_pBufferRGB != NULL)
    {
        delete[]m_pBufferRGB;
        m_pBufferRGB = NULL;
    }
    if (m_pBufferRaw != NULL)
    {
        delete[]m_pBufferRaw;
        m_pBufferRaw = NULL;
    }
    emStatus = GXCloseDevice(m_hDevice);
    emStatus = GXCloseLib();
    return 0;
}

3.3插上摄像头USB3.0到电脑USB3.0,点击生成解决方案,启动调试即可用。效果:

 


 

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值