工业线阵相机型号:Piranha4_CC-08K050
采集卡型号:OR-Y4C0-XMX00
硬件连接:工业相机需要连接12V到24V电源,使用一个220V转24V的开关电源。使用数据使用cameralink medium/full,需要使用两根cameralink线连接到采集卡。
在相机厂商官网可以下载
https://www.teledynedalsa.com/en/products/imaging/vision-software/sapera-lt/download/
填写信息,可以进行下载。
安装Sapera_LT_8.30_SDK,该软件包含开发者工具和相机配置工具。
最新版8.41一直下载不成功,只能使用网上流传的较低的版本8.30。
打开软件,选择采集卡设备和要使用的cameralink设备,选择相机设备,相机设备描述文件包含在相机硬件中,第一次使用可以使用做的功能检测相机的功能。相机连接成功,可以进行参数的设置和采集的控制。
在程序中控制线阵相机并把采集的图像用opencv显示出来。
例程中设备的连接通过菜单来选择,在实际使用时可以直接连接已知的设备,对代码做如下修改
UINT32 acqDeviceNumber;
char* acqServerName = new char[CORSERVER_MAX_STRLEN];
char* configFilename = new char[MAX_PATH];
acqDeviceNumber = 1;
const char* acqServer = "Xtium-CL_MX4_1";
const char* configFile = "C:\\Program Files\\Teledyne DALSA\\Sapera\\CamFiles\\User\\T_P4-CC-08K050_(Piranha_4)_RGB8_Default.ccf";
strcpy(acqServerName, acqServer);
strcpy(configFilename, configFile);
把采集卡名称,相机配置文件都设置为固定的。
根据例程,可以实现图像的显示,这是SDK自带的一个View控件。如果要把SDK中的图像buffer转为opencv可以操作的格式,使用如下代码:
在static void XferCallback(SapXferCallbackInfo* pInfo)函数中:
SapView* pView = (SapView*)pInfo->GetContext();
SapBuffer* buffer = pView->GetBuffer();
BYTE pData;
void* pDataAddr = &pData;
BOOL success = buffer->GetAddress(&pDataAddr); //static_count
int width = buffer->GetWidth();
int height = buffer->GetHeight();
SapDataFRGB* rgb;
cv::Mat img = cv::Mat::zeros(cv::Size(width, height), CV_8UC4);
memcpy(img.data, pDataAddr, width * height*4);
cv::Mat show;
cv::resize(img, show, cv::Size(800, 200));
cv::imshow("show", show);
cv::waitKey(1);
SDK中参数控制不能成功,在使用
SapFeature feature(acqServerName);
类的时候,程序运行时报错。
只能在CamExpert中配置好后保存到ccf配置文件中,在c++中加载这个配置文件。