利用basler相机自带的SDK进行多相机出图,为了便于理解,特将多相机出图部分的程序拷贝出来,在win32控制台环境下,配合OpenCV进行出图测试。

运行环境:VS2013、OpenCV2410

OpenCV的安装流程可参考其它的文档

此外需要安装basler相机的驱动程序,特别地,需要选择开发者模式(pylon5.0)。

一切就绪后,新建win32控制台程序,并添加basler目录,具体如下:

1.在“配置属性”->“C/C++”的附加包含目录中,添加 $(PYLON_DEV_DIR)\include

2.在“配置属性”->“链接器”的附加目录中,添加 $(PYLON_DEV_DIR)\lib\win32

特别地,选择win32的库,还是x64的库,需要看模拟计算机的类型(我的电脑是x64,但是VS2013是32位,调试器也是win32,所以我使用win32的库)。

我连接的是两个相机,可以在程序中测试两个相机的抓图效果。

特别地,网口相机需要进行IP配置,配置的方式比较简单,可以参考其它文档,并用basler自带的IP Configurator来进行IP设置和相机状态检测。

win32控制台主程序如下:

-------------------------------------------------------

#include <iostream>
#include <fstream>
#include <windows.h>
#include <opencv2/opencv.hpp>
#include <pylon/PylonIncludes.h>

using namespace Pylon;

static const int imagesGrabNum = 10;//处理的帧数
static const int maxCameras = 6;//限制相机个数
#define CAMEID1 21686511//相机ID
#define CAMEID2 21687637
static const int IDN = 1;//相机序号,0 1 2 ...

int main()
{

Pylon::PylonInitialize();

try
    {
        CTlFactory &tlFactory = CTlFactory::GetInstance();//
        DeviceInfoList_t devices;
        if (tlFactory.EnumerateDevices(devices) == 0)
        {
            throw RUNTIME_EXCEPTION("没有检测到可用相机!");
        }
        CInstantCameraArray cameras(MIN(devices.size(), maxCameras));
        for (int i = 0; i < (int)cameras.GetSize(); i++)
        {
            cameras[i].Attach(tlFactory.CreateDevice(devices[i]));
            std::cout << "第 " << i + 1 << " 个相机的型号为:" <<cameras[i].GetDeviceInfo().GetModelName()<<" ID为:"<< cameras[i].GetDeviceInfo().GetSerialNumber() << std::endl;
        }
        std::cout << std::endl;
        cameras[IDN].StartGrabbing();//相机开始抓图,序号为IDN的相机
        CGrabResultPtr ptrGrabResult;//存储抓图结果信息
        for (int i = 0; i < imagesGrabNum ; i++)
        {
            cameras[IDN].RetrieveResult(5000, ptrGrabResult, TimeoutHandling_ThrowException);//将抓取后的数据存储在ptrGrabResult中
            int cameraContextValue = ptrGrabResult->GetCameraContext();//相机序号
            std::cout << i+1<<"----------相机ID:" << cameras[cameraContextValue].GetDeviceInfo().GetSerialNumber() << "----------" << std::endl;
            std::cout << "图像抓取状态:" << (ptrGrabResult->GrabSucceeded() ? "成功" : "失败") << std::endl;
            std::cout << "相机水平分辨率:" << ptrGrabResult->GetWidth() << ";相机垂直分辨率:" << ptrGrabResult->GetHeight() << std::endl;
            unsigned char *pImageBuffer = (unsigned char *)ptrGrabResult->GetBuffer();
            std::cout << "图像第一个像素点的灰度值为:" << (int)pImageBuffer[0] << std::endl;
            std::cout << std::endl;
#if 1//测试buffer
            cv::Mat img = cv::Mat((int)ptrGrabResult->GetHeight(), (int)ptrGrabResult->GetWidth(), CV_8UC1);
            for (int i = 0; i < (int)ptrGrabResult->GetHeight(); i++)
            {
                for (int j = 0; j < (int)ptrGrabResult->GetWidth(); j++)
                {
                    img.at<uchar>(i, j) = pImageBuffer[i*(int)ptrGrabResult->GetWidth() + j];
                }
            }
#endif
        }
        cameras[IDN].StopGrabbing();
    }
    catch (GenericException &e)
    {
        std::cerr << "抓图出现异常!" << std::endl << e.GetDescription() << std::endl;
    }

std::cout << "程序处理完毕,按任意键退出程序..." << std::endl;
    while (std::cin.get())
    {
        break;
    }
    PylonTerminate();
    
    return 0;
}

---------------------------------

测试效果如下:

特别地,对上述程序进行适当的修改,可以进行相机的同步出图,以及出图效果测试。

---------------------------------------------------------

//2018.07.26 更新

今天补充一下在程序中设置相机的曝光参数(增益参数类似,再次不作介绍)。

最好不要随便设置增益,因为噪音对增益很敏感,一般设置相机的曝光即可。

设置曝光参数,需要用到对象函数 .ExposureTimeAbs.SetValue(value);

以下是利用网口相机进行相机曝光设置的简单代码(借鉴SDK):

-------------------

#include <iostream>
#include <fstream>
#include <windows.h>
#include <opencv2/opencv.hpp>
#include <pylon/PylonIncludes.h>
#include <pylon/gige/BaslerGigEInstantCamera.h>
#include <pylon/gige/_BaslerGigECameraParams.h>
#include <pylon/PylonGUI.h>

using namespace std;
using namespace Pylon;
using namespace Basler_GigECameraParams;

typedef Pylon::CBaslerGigEInstantCamera Camera_t;
typedef Camera_t::GrabResultPtr_t GrabResultPtr_t;

int main()
{
    int exitCode = 0;
    PylonInitialize();
    
    
    try
    {
        //only look for cameras supported by Camera_t
        CDeviceInfo info;
        info.SetDeviceClass(Camera_t::DeviceClass());

Camera_t camera(CTlFactory::GetInstance().CreateDevice(info));//如何区别不同的相机?
        std::cout << "所使用的相机SN号为:" << camera.GetDeviceInfo().GetSerialNumber() << std::endl;

//auto function do not require grabbing!
        camera.RegisterConfiguration(new CAcquireContinuousConfiguration, RegistrationMode_ReplaceAll, Cleanup_Delete);

//open camera
        camera.Open();

//turn test image off
        camera.TestImageSelector = TestImageSelector_Off;

//Only area scan cameras support auto functions!
        if (camera.DeviceScanType.GetValue() == DeviceScanType_Areascan)//面阵相机
        {

#if 1    //程控测试
            std::cout << "程控测试。需要终止请按 回车 键..." << std::endl;
            GrabResultPtr_t ptrGrabResult;
            int n = 20;
            while (--n>0)
            {
                camera.ExposureTimeAbs.SetValue(n*10000);
                camera.GrabOne(5000, ptrGrabResult);
#ifdef PYLON_WIN_BUILD
                Pylon::DisplayImage(1, ptrGrabResult);//界面刷新不同曝光值的出图效果
#endif
                WaitObject::Sleep(1);
            }

#endif
            
        }
        else
        {
            std::cerr << "只有面阵相机才支持自动功能!" << std::endl;
        }

//close camera
        camera.Close();
    }
    catch (const TimeoutException &e)
    {
        std::cerr << e.GetDescription() << std::endl;
        std::cin.get();
        return 0;
    }
    catch (const GenericException &e)
    {
        std::cerr << e.GetDescription() << std::endl;
        std::cin.get();
        return 0;
    }

PylonTerminate();
    
    std::cin.get();
    return 0;
}

-------------------

Basler 多个网口相机出图(SDK版)相关推荐

  1. 中望3D 2021出图进阶版-3D出图技巧合集

    一. 隐藏多余线条 双击视图 – "视图属性"对话框中进行设置: "通用"选项卡 – "显示消隐线"按钮关闭: "线条" ...

  2. 【原创】ArcGIS、ArcMap 使用数据驱动出图,同步生成属性统计表格

    [原创]记一次使用数据驱动出图,顺手开发了一个动态表格生成脚本 0.最终效果 先展示一下最终效果,PS图中没有比例尺,后期也可以加上,以是初稿(非正北视图) 正北视图效果,暂时没导入底图,先看大体样式 ...

  3. Basler pylon安装及对网口相机基本设置

                                                                       Pylon安装及采图操作 从basler官网上下载与当前操作系统适 ...

  4. 富士相机设置传原图_富士X-S10相机传图必看!原创完美解决PC互传图片问题

    富士X-S10相机传图必看!原创完美解决PC互传图片问题 2020-11-28 17:03:04 18点赞 28收藏 23评论 创作立场声明:原创首发分享,实用技巧希望推荐好文! 最近入手了富士X-S ...

  5. Basler驱动如何彩色相机白平衡说明

    S1:配置相机IP地址,具体参考附件"Basler千兆网相机-上手使用指南" S2:打开 S3.单价菜单先锋Camera->Open,打开相机:再选择Camera->C ...

  6. 关于Cxp采集卡连接大面阵相机取图耗时问题研究

    前言 就目前为止,使用面阵相机的话,我一般都使用海康的SDK,最近几年,开始使用Cxp采集卡的大面阵相机,继续使用海康的SDK取图 现象 最近发现使用151M大面阵相机取图时,彩色的图比黑百图慢了很多 ...

  7. 灰点工业网口相机多相机同时使用

    最近对灰点的工业网口相机进行了调试,最终目标是要实现多相机的同时采集. 使用工业网口相机 第一步要安装相机的SDK: 包含spinnaker软件包和pyhton扩展. 这个软件包不好下载,可以去下载上 ...

  8. 海思HiPQTools链接单板出图

    前言 环境介绍: 1.编译环境 Ubuntu 18.04.5 LTS 2.SDK Hi3519AV100_SDK_V2.0.1.0 3.单板 Hi3519AV100开发板 IMX347 2688x15 ...

  9. 利用OSGBLab对倾斜摄影OSGB的建筑进行立面出图

    OSGBLab除了能输出顶视的真正射DOM,还能选定范围进行立面出图.这对于立面绘图工作者来说就是一个非常得力的助手了,因为是真实尺寸,直接在图上绘制就能很方便的转成cad或者矢量数据. QQ录屏20 ...

最新文章

  1. python入门:正则表达式,面向对象编程,零基础视频教程分享
  2. isnull的使用方法
  3. 【特征工程】(未完成)编码
  4. idea servlet自动配置web.xml_Spring Boot学习04_嵌入式Servlet容器自动配置原理
  5. 关于以追加模式写入文件时,为什么第一行是空行?
  6. 通过自定义配置实现插件式设计
  7. 响应式图片(srcset属性和picture元素)
  8. Mac OS X 下 U盘安装盘简易制作教程
  9. 【学习笔记】cs231n-assignment1-two_layer_net
  10. APP开发接口分类介绍
  11. 在win7和win10上通过INF文件安装64位WDM驱动
  12. python3爬取网易云歌单数据清洗_网易云音乐爬虫 数据可视化分析
  13. Excel宏编程代码,根据混合的名次合并计算进退值
  14. 【GD32F303开发之串口通信】
  15. 一些图像置乱算法matlab
  16. ubuntu20.04安装并运行ORB_SLAM3(一路顺风版)
  17. 好好说话之Tcache Attack(1):tcache基础与tcache poisoning
  18. 网页设计配色应用实例之黄色系
  19. Linux之sudo自动输入密码
  20. Media Player Classic - HC 源代码分析 14:PIN连接过程中推模式和拉模式区别

热门文章

  1. RecyclerView 配合 DiffUtil,RecyclerView局部刷新
  2. 小规模公司如何简易做账报税?
  3. Unity3D 200个插件免费分享
  4. 最全ASCII对应码表-键值
  5. 嵌入式实时操作系统7——任务优先级表
  6. matlab的udt,西门子PLC的UDT是干什么的?如何使用?终于讲清楚了
  7. ImageMagick将多张图片拼接成一张图片_怎么免费把图片转成PDF?教你4种实用方法...
  8. HDU 1024 Max Sum Plus Plus 动态规划
  9. 国内UPS电源品牌排行-科士达UPS
  10. 善用宝贝标题关键字 提高站内搜索流量