DALSA采集卡CameraLink数据接口二次开发

3 篇文章 0 订阅
2 篇文章 1 订阅

1、开发环境
VS2019+VC+Windowsx64
2、引用包含
头文件
C:/Program Files/Teledyne DALSA/Sapera/Classes
C:/Program Files/Teledyne DALSA/Sapera/Include

C:/Program Files/Teledyne DALSA/Sapera/Lib/Win64/SapClassBasic.lib
3、代码
头文件
#include <Basic/SapClassBasic.h>
关键成员变量
SapTransfer* m_Xfer;
SapBuffer* m_Buffers;
SapAcquisition* m_Acq;
4、初始化相机

bool DalsaScan::InitCarmer(std::string ServerName, std::string ConfigPath, int ResourceIndex)
{
	if (initstate)
	{
		Destroy();
	}
	_buffcallback = nullptr;
	m_Acq = nullptr;
	m_Buffers = nullptr;
	m_Xfer = nullptr;
	initstate = false;
	SapLocation loc(ServerName.c_str(), ResourceIndex);
	if (SapManager::GetResourceCount(ServerName.c_str(), SapManager::ResourceAcq) > 0)
	{
		m_Acq = new SapAcquisition(loc, ConfigPath.c_str());
		m_Buffers = new SapBufferWithTrash(2, m_Acq);
		m_Xfer = new SapAcqToBuf(m_Acq, m_Buffers, XferCallback, this);
	}
	if (!CreateObject())
	{
		return false;
	}
	initstate = true;
	return initstate;
}
bool DalsaScan::CreateObject()
{
	// Create acquisition object
	if (m_Acq && !*m_Acq && !m_Acq->Create())
	{
		DestoryObject();
		return false;
	}
	// Create buffer object
	if (m_Buffers && !*m_Buffers)
	{
		if (!m_Buffers->Create())
		{
			DestoryObject();
			return false;
		}
		// Clear all buffers
		m_Buffers->Clear();
	}
	// Create transfer object
	if (m_Xfer && !*m_Xfer && !m_Xfer->Create())
	{
		DestoryObject();
		return false;
	}
	return true;
}
void DalsaScan::Destroy()
{
	DestoryObject();
	initstate = false;
}
void DalsaScan::DestoryObject()
{
	// Destroy transfer object
	if (m_Xfer && *m_Xfer)
	{
		m_Xfer->Destroy();
	}
	// Destroy Buffer object
	if (m_Buffers && *m_Buffers)
	{
		m_Buffers->Destroy();
	}
	// Destroy acquisition object
	if (m_Acq && *m_Acq)
	{
		m_Acq->Destroy();
	}
	if (m_Xfer != nullptr)
	{
		delete m_Xfer;
	}
	if (m_Buffers != nullptr)
	{
		delete m_Buffers;
	}
	if (m_Acq != nullptr)
	{
		delete m_Acq;
	}
	m_Xfer = nullptr;
	m_Buffers = nullptr;
	m_Acq = nullptr;
	initstate = false;
}

5、采图控制

bool DalsaScan::Grab()
{
	return initstate?m_Xfer->Grab():initstate;
}

bool DalsaScan::Snap()
{
	return initstate?m_Xfer->Snap():initstate;
}

bool DalsaScan::Freeze()
{
	return initstate?m_Xfer->Freeze():initstate;
}

6、枚举采集卡名称

std::list<std::string> DalsaScan::EnumCardName()
{
	list<string> cardlist = list<string>();
	int serverCount = SapManager::GetServerCount();
	if (serverCount == 0)
	{
		return cardlist;
	}
	for (int i = 0; i < serverCount; i++)
	{
		if (SapManager::GetResourceCount(i, SapManager::ResourceAcq) != 0)
		{
			char* serverName = nullptr;
			serverName = (char*)malloc(CORSERVER_MAX_STRLEN);
			if (serverName != nullptr)
			{
				memset(serverName, 0, CORSERVER_MAX_STRLEN);
				SapManager::GetServerName(i, serverName, CORSERVER_MAX_STRLEN);
				string name(serverName);
				free(serverName);
				if(name == "System")
				{
					continue;
				}
				cardlist.push_back(name);
			}
			else
			{
				printf("EnumCardName: Get CardName Memery Fail\n");
			}
		}
	}
	return cardlist;
}

7、使用示例

int main()
{
    shared_ptr<IPythonScan> cis = GetCamer::GetCurrentCamera();
    list<string> cardlist = cis->EnumCardName();
    if (cardlist.size() == 0)
    {
        printf("card number is 0!\n");
        system("pause");
        return -0;
    }
    else
    {
        for (string name : cardlist)
        {
            printf("card name: %s\n", name.c_str());
        }
    }
    if (!cis->InitCarmer(cardlist.front(), "C:\\Users\\wl\\Desktop\\N_No_Name_Default_Default.ccf", 0))
    {
        printf("init card fail!\n");
        system("pause");
        return -1;
    }
    if (!cis->CameraIsOnline())
    {
        printf("not detected camera!\n");
        system("pause");
        return -2;
    }
    cis->Destroy();
    system("pause");
}

由于我的库里面掺杂了一些关于我们公司相机的控制选项,不适用其他公司的相机,就暂不放出来了,本人用DALSA的SDK不太熟悉,有问题请各位大大及时指正

  • 2
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: dalsa采集卡是一种高性能的图像采集卡,可以实现快速的图像采集。在使用dalsa采集卡进行图像采集时,我们需要使用MFC编写程序进行图像的获取和处理。 MFC是Microsoft Foundation Classes的缩写,是一组用于C++编程的库,提供了创建Windows应用程序所需的基本工具和框架。通过使用MFC,我们可以轻松地创建图形用户界面和处理用户输入、输出等操作。同时,MFC还支持多线程操作,可以更好地满足图像处理的需求。 对于dalsa采集卡的操作,我们可以使用MFC提供的类库和函数来实现图像的获取和处理。通过创建应用程序框架、窗口、消息处理等,我们可以实现与dalsa采集卡的交互和数据的处理。同时,MFC提供了丰富的图像处理函数和类库,可以实现丰富的图像处理操作,例如图像转换、滤波、裁剪、旋转等。 总之,dalsa采集卡的操作需要使用MFC进行编程,MFC提供了丰富的功能和工具来实现图像的获取和处理。通过合理地使用MFC,我们可以为图像采集和处理提供快速、高效的解决方案。 ### 回答2: Dalsa采集卡是一种高质量的图像采集设备,广泛应用于科研、工业和医疗等领域。这种采集卡具备多种接口,可以与各种不同的工业相机和CCD相机连接,能够快速地采集高清晰度、高精度的图像信息。 而在MFC程序中,Dalsa采集卡是一个非常重要的组件。利用Dalsa采集卡,我们可以轻松实现图像的实时采集和处理。通过调用相应的API函数,我们可以快速地建立图像采集工作流程。同时,Dalsa采集卡支持各种不同的图像格式和采集参数设置,满足不同应用场景的需求。 需要注意的是,在使用Dalsa采集卡取图时,需要注意一些细节问题,比如图像缓存的设置、图像格式的转换和存储等。对于MFC程序开发人员来说,掌握Dalsa采集卡的使用方法和技巧,可以提高图像采集、处理和存储的效率,进而增强程序的可靠性和实用性。 ### 回答3: dalsa采集卡是一种高性能的图像采集卡,能够快速、高效地采集图像数据,具有优异的信号处理能力和高速的图像传输速度。同时,该采集卡还有广泛的应用领域,包括医学、工业、机器视觉等。 在使用dalsa采集卡进行图像采集时,需要借助于MFC框架,通过编写MFC程序实现图像采集和处理。MFC是Microsoft Foundation Class的缩写,是一种快速、可靠的应用程序建模框架,可帮助开发者快速构建Windows应用程序。 具体而言,可以通过MFC提供的类库和方法,实现连接dalsa采集卡、初始化采集参数、启动采集、获取图像数据等操作。同时,可以使用MFC框架提供的各种功能,对采集的图像进行处理、显示和保存等。 总的来说,dalsa采集卡和MFC框架相结合,可以实现快速、高效地实现图像采集和处理,为各种应用领域提供了良好的技术支持。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值