C++ 大恒水星相机的单帧采集及回调采集 利用OpenCV转成 Mat格式

本文介绍了如何使用C++配合大恒水星MER-310-12UC相机进行单帧和回调采集,并利用OpenCV将图像转换为Mat格式。在Win10环境下,通过VS2017和OpenCV3.4实现。文中提到了SDK的使用,包括安装、环境配置以及解决CGalaxyEeception错误的方法。同时,详细阐述了将BayerRG8格式原始数据转换为RGB24的过程,以便于在OpenCV中处理。
摘要由CSDN通过智能技术生成

C++ 大恒水星相机的单帧采集及回调采集 利用OpenCV转成 Mat格式
最近购买一大恒水星MER-310-12UC型彩色相机,其SDK在2019年进行了更新,与之前SDK有很大不同,故现在网上资料较少,将一些简单的采集转换操作过程进行总结,后一篇将介绍与QT结合在软件界面中进行视频播放等操作。 环境是Win10,VS2017, OpenCV3.4

1. 使用手册阅读

  1. 首先我们要在其官网下载大恒相机的SDK,官网地址:http://www.daheng-imaging.com/,点击下载中心中的软件下载选择合适版本进行下载。然后安装
    在这里插入图片描述
  2. 安装好了软件以后,在安装目录下找到说明书,路径一般为安装目录下:\Daheng Imaging\GalaxySDK\Doc 按照说明书搭建编译环境
    在这里插入图片描述
    在这里插入图片描述
    认真阅读里面的一些函数及环境搭建方法,但是其给出的示例不能调试成功,后面进行更改可以正确运行程序。

我们在工程需要把图存成Opencv的Mat形式。大恒C++ SDK采集的图像数据不能直接把图像的数据存进Mat,需要将原始数据(我这里是BayerRG8)经过格式转换之后转变成RGB24的格式,直接调用SDK的ConvertToRGB24函数。然后再向Mat写入数据。

2. 相机回调采集

// An highlighted block
#include <iostream>
#include <opencv2/opencv.hpp>
//using namespace cv;
using namespace std;
#include <GalaxyIncludes.h>

cv::Mat img;
//用户继承掉线事件处理类
class CSampleDeviceOfflineEventHandler : public IDeviceOfflineEventHandler
{
   
public:
	void DoOnDeviceOfflineEvent(void* pUserParam)
	{
   
		cout << "收到设备掉线事件!" << endl;
	}
};

//用户继承属性更新事件处理类

class CSampleFeatureEventHandler : public IFeatureEventHandler
{
   
public:
	void DoOnFeatureEvent(const GxIAPICPP::gxstring&strFeatureName, void* pUserParam)
	{
   
		cout << "收到曝光结束事件!" << endl;
	}
};

//用户继承采集事件处理类
class CSampleCaptureEventHandler : public ICaptureEventHandler
{
   
public:
	void DoOnImageCaptured(CImageDataPointer&objImageDataPointer, void* pUserParam)
	{
   
		cout << "收到一帧图像!" << endl;
		cout << "ImageInfo: " << objImageDataPointer->GetStatus() << endl;
		cout << "ImageInfo: " << objImageDataPointer->GetWidth() << endl;
		cout << "ImageInfo: " << objImageDataPointer->GetHeight() << endl;
		cout << "ImageInfo: " << objImageDataPointer->GetPayloadSize() << endl;

		img.create(objImageDataPointer->GetHeight(), objImageDataPointer->GetWidth(), CV_8UC3);
		void *pRGB24Buffer = NULL;
		//假设原始数据是BayerRG8图像
		pRGB24Buffer = objImageDataPointer->ConvertToRGB24(GX_BIT_0_7, GX_RAW2RGB_NEIGHBOUR, true);
		memcpy(img.data, pRGB24Buffer, (objImageDataPointer->GetHeight()) * (objImageDataPointer->GetWidth()) * 3);
		cv::flip(img, img, 0);
		cv::imshow("sss", img);
		cv::waitKey(1);

		cout << "帧数:" << objImageDataPointer->
  • 14
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值