天天看点

vs2017+opencv3.2.0+pylon5.0.10

现阶段做双目立体视觉工作,前几天刚配置好开发环境,随笔记录下。

采用的相机是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的环境变量,

vs2017+opencv3.2.0+pylon5.0.10

pylon安装过程中会自动配置环境变量。

3:vs2017中新建一个空项目的控制台程序,然后添加一个cpp文件,再打开属性管理器

vs2017+opencv3.2.0+pylon5.0.10

在debugx64 中新建一张属性表然后进行编辑。

4:先在通用属性VC++目录中 的包含目录

vs2017+opencv3.2.0+pylon5.0.10

添加四个路径:

opencv\build\include

opencv\build\include\opencv

opencv\build\include\opencv2

basler\Development\include

取决于你的具体安装位置

5:在库目录添加

vs2017+opencv3.2.0+pylon5.0.10

basler\Development\lib\x64

opencv3.2.0\build\x64\vc14\lib

6:在链接器输入选项中输入

vs2017+opencv3.2.0+pylon5.0.10

输入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 类型,便于后续处理。

测试结果。

vs2017+opencv3.2.0+pylon5.0.10