大恒MER-030工业相机+linux+opencv+clion-简易开发:让视频小窗跑出来

大恒工业相机usb2.0简易开发(一)

前言

由于官方的sdk里的sample并没有详细写结合opencv开发的一些内容,在此做下入门记录,目标是在clion环境下,实时输出视频小窗。

另外,在使用过程中,发现GxRegisterCaptureCallback(注册回调函数)和GxUnregisterCaptureCallback(注销回调函数)不能用,不知道为什么,待解决,在之后的代码中我是用GxGetImage来写的

最终效果:
在这里插入图片描述

clion配置

官方的sdk中只有makefile的配置,可以根据此来改写成cmakelist配置,代码如下:

cmake_minimum_required(VERSION 3.5)

project(GX_myJob_usb2_0) 
set(CMAKE_CXX_STANDARD 14)

# 相机要加的编译部分
set(CMAKE_EXE_LINKER_FLAGS
        -I$(GENICAM_ROOT_V2_3)/library/CPP/include
        -I$(DAHENG_ROOT)/sdk/include
        )

# 寻找必要依赖库
find_package(OpenCV 4 REQUIRED)

# 设置头文件目录
include_directories(${
   OpenCV_INCLUDE_DIRS})

# 添加可执行文件以及链接
add_executable(GX_myJob_usb2_0 main.cpp)
target_link_libraries(GX_myJob_usb2_0 ${
   OpenCV_LIBS})
target_link_libraries(GX_myJob_usb2_0
        -ldhgentl -lgxiapi -ldximageproc -lpthread
        -L$(GENICAM_ROOT_V2_3)/bin/Linux64_x64
        -L$(GENICAM_ROOT_V2_3)/bin/Linux64_x64/GenApi/Generic)

其中-ldhgentl -lgxiapi -ldximageproc -lpthread是必须加的,其他我删掉也没啥问题,但以防万一全加上了。

主函数代码

在下面 ProcGetImage 函数中写图像处理的部分即可,有很多函数在这里没用到(比如保存为PPM文件等),重点在 ProcGetImage中。
如果要用cmake的话,得把sdk里的DxImageProc.hGxIAPI.h也给拉进项目里。

#include "GxIAPI.h"
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>
#include "DxImageProc.h"
#include "CTimeCounter.h"
using namespace std;
using namespace cv;

GX_DEV_HANDLE g_hDevice = NULL;                     ///< 设备句柄
GX_FRAME_DATA g_frameData;                          ///< 采集图像参数
pthread_t g_hThreadAcq;                             ///< 采集线程
bool g_bGetImg = false;                             ///< 采集线程是否结束的标志:true 运行;false 退出
int32_t g_nImageSize = 0;                           ///< 图像大小
void *g_pRaw8Buffer = NULL;                         ///< 将非8位raw数据转换成8位数据的时候的中转缓冲buffer
void *g_pRGBframeData = NULL;                       ///< RAW数据转换成RGB数据后的存储空间,大小是相机输出数据大小的3倍
int64_t g_nPixelFormat = GX_PIXEL_FORMAT_BAYER_GR8; ///< 当前相机的pixelformat格式
int64_t g_nColorFilter = GX_COLOR_FILTER_NONE;      ///< bayer插值的参数
void *g_pframeInfoData = NULL;                      ///< 帧信息数据缓冲区
size_t g_nframeInfoDataSize = 0;                    ///< 帧信息数据长度
CTimeCounter g_objTimeCounter;                      ///< 计时器
Mat test;                                           ///< 显示的图像

//查询固件版本号
void PrintFirmwareVersion(GX_FEATURE_ID featureID);

//查询FPGA版本号
void PrintFPGAVersion(GX_FEATURE_ID featureID);

//获取图像大小并申请图像数据空间
void PreGetImage();

//释放资源
void UnPreGetImage();

//采集线程函数
void *ProcGetImage(void* pParam);

//保存数据到PPM文件
void SavePPMFile(void *pImgBuffer, int32_t nWidth, int32_t nHeight);

//保存raw数据文件
void SaveRawFile(void *pImgBuffer, int32_t nWidth, int32_t nHeight);

//将相机输出的原始数据转换为RGB数据
void ProcessData(void * pImageBuf, void * pImageRaw8Buf, void * pImageRGBBuf, int nImageWidth, int nImageHeight, int nPixelFormat, int nPixelColorFilter);

//获取当前帧号
int GetCurFrameIndex();

//打印一个Mat矩阵
void PrintMat(Mat A)
{
   
    for(int i=0;i<A.rows;i++)
    {
   
        for(int j=0;j<A.cols;j++)
            cout<<A.at<float>(i,j
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
大恒 mer-500-14gm是一款基于工业机器人平台的自主研发机器人系统。其二次开发主要针对实际应用需求,进行了针对性的功能扩展和技术优化。具体来说,以下是该机器人系统的二次开发方向与应用: 一、 功能扩展: 1. 增加自主避障功能:在机器人运行时,可以进行障碍物识别和避障,避免类似物体的碰撞、撞击事故的发生。 2. 增加自主调整功能:在机器人运行时,可以根据外部环境的变化进行自适应调整,以达到更高的精度和效率。 3. 增加远程操作功能:可以实现远程遥控,对机器人的运行和操作进行实时监控,保证更好的工作效果。 二、 技术优化: 1. 优化控制系统:对控制系统进行深度优化,使机器人更加稳定和精确。 2. 优化传感器系统:采取更先进的传感器技术,提高机器人的感知能力和定位准确度。 三、 应用领域: 1. 工业制造领域:机器人可以进行自动化生产线上的工作,提高生产效率和产品质量。 2. 物流仓储领域:机器人可以完成货物装卸和搬运等工作,实现自动化物流流程。 3. 农业植保领域:机器人可以进行农田的测绘、喷洒农药等工作,提高高效、环保的现代化农业生产水平。 综上所述,大恒 mer-500-14gm机器人系统的二次开发,旨在通过新功能、技术改进及广泛应用领域,提高机器人系统的性能和适用性,推动智能制造和生产升级。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值