现阶段做双目立体视觉工作,前几天刚配置好开发环境,随笔记录下。
采用的相机是basler acA1920-155um 型号。本人选择opencv3.2.0基于Windows平台。
opencv官方下载链接
http://opencv.org/releases.html#。
pylon5.0.10官方下载链接https://www.baslerweb.com/cn/support/downloads/software-downloads/pylon-5-0-10-windows/
配置过程:
1:安装opencv3.2.0和pylon5.0.10,pylon5.0.10需要选择开发者模式,同时选择相机接口类型,本人采用的usb3.0接口。
2:添加opencv的环境变量,

pylon安装过程中会自动配置环境变量。
3:vs2017中新建一个空项目的控制台程序,然后添加一个cpp文件,再打开属性管理器
在debugx64 中新建一张属性表然后进行编辑。
4:先在通用属性VC++目录中 的包含目录
添加四个路径:
opencv\build\include
opencv\build\include\opencv
opencv\build\include\opencv2
basler\Development\include
取决于你的具体安装位置
5:在库目录添加
basler\Development\lib\x64
opencv3.2.0\build\x64\vc14\lib
6:在链接器输入选项中输入
输入opencv_world320d.lib 对应的是debug 模式
输入opencv_world320.lib 不带d的是release 模式
注意编译器要选择 x64
7: 将配置好的属性表保存出来,以后每次新建工程添加一次
测试代码
#include"stdafx.h"
#include"opencv2/opencv.hpp"
#include <pylon/PylonIncludes.h>
#include<iostream>
#ifdef PYLON_WIN_BUILD
#include <pylon/PylonGUI.h>
#endif
/*-----------------------------命名空间-------------------------------------*/
using namespace Pylon;
using namespace cv;
using namespace std;
int main()
{
//pylon 类型图片定义
CPylonImage pylonImage;
//pylon 格式转换定义
CImageFormatConverter formatConverter;
formatConverter.OutputPixelFormat = PixelType_BGR8packed;
//指向拍摄结果的结构体指针
CGrabResultPtr ptrGrabResult;
//opencv 类型图片定义
Mat openCvImage_left;
Mat openCvImage_right;
/*-----------------------------pylon相机初始化-----------------------------------*/
//pylon相机自动初始化和终止
PylonAutoInitTerm autoInitTerm;
//建立传输工程
CTlFactory& tlFactory = CTlFactory::GetInstance();
//获取相机信息
DeviceInfoList_t devices;
if (tlFactory.EnumerateDevices(devices) == )
{
cout << "监测到两个相机" << endl;
}
//创建相机序列并标识信息
CInstantCameraArray cameras();
for (size_t i = ; i < cameras.GetSize(); ++i)
{
cameras[i].Attach(tlFactory.CreateDevice(devices[i]));
}
/*-----------------------------pylon相机开始抓取-----------------------------------*/
//开始拍摄
cameras.StartGrabbing();
while(cameras.IsGrabbing())
{
// 设置指针重载间隔,20ms
cameras.RetrieveResult(, ptrGrabResult, TimeoutHandling_ThrowException);
intptr_t cameraContextValue = ptrGrabResult->GetCameraContext();
//显示实时图像
DisplayImage(cameraContextValue, ptrGrabResult);
/*-----------------------------pylon图像到opencv图像的转换-----------------------------------*/
if (ptrGrabResult->GetCameraContext() == )
{
formatConverter.Convert(pylonImage, ptrGrabResult);
openCvImage_left = cv::Mat(pylonImage.GetHeight(), pylonImage.GetWidth(), CV_8UC3, (uint8_t *)pylonImage.GetBuffer());
}
if (ptrGrabResult->GetCameraContext() == )
{
formatConverter.Convert(pylonImage, ptrGrabResult);
openCvImage_right = cv::Mat(ptrGrabResult->GetHeight(), ptrGrabResult->GetWidth(), CV_8UC3, (uint8_t *)pylonImage.GetBuffer());
}
}
system("pause");
return ;
}
这段代码 实现了打开双目相机,并将pylon格式图片转换为opencv Mat 类型,便于后续处理。
测试结果。