basler相机的触发线是那两脚_Qt(C++)调用工业相机Basler的SDK使用示例

本文介绍了如何在Qt环境中使用C++调用Basler相机的SDK,包括初始化相机、设置曝光时间、增益、频率等参数,并提供了详细代码示例。适用于工业应用中的图像采集和处理。
摘要由CSDN通过智能技术生成

简介

由于公司采购的AVT相机不足,需要用Basler相机来弥补,所以我也了解了一下Basler这款相机的SDK。由于Basler这边的相机提供的没有提供Qt的示例,所以我做一个分享出来。

本篇的Demo采用的是工业黑白相机。工业应用中,如果我们要处理的是与图像颜色有关,那么我们最好采用彩色工业相机;如果不是,那么我们最好选用黑白工业相机,因为在同样分辨率下的工业相机,黑白工业教学精度比彩色工业相机高,尤其是在看图像边缘的时候,黑白工业相机的效果更好。

开发环境

Qt:  5.6.2vc2013版

Basler:  5.0.11版

效果图

上图只是做了SDK部分接口的获取和设置。相机的触发方式、曝光时间、增益、频率,以及图片的尺寸、灯的触发信号等。

Basler相机SDK接口调用控制类

#ifndef SBASLERCAMERACONTROL_H

#define SBASLERCAMERACONTROL_H

#include

#include

#include

#include

#define DOUBLE_MAX 100000

#define DOUBLE_MIN 0

using namespace std;

using namespace Pylon;

using namespace GenApi;

class SBaslerCameraControl : public QObject

{

Q_OBJECT

public:

explicit SBaslerCameraControl(QObject *parent = 0);

~SBaslerCameraControl();

enum SBaslerCameraControl_Type{

Type_Basler_Freerun, //设置相机的内触发

Type_Basler_Line1, //设置相机的外触发

Type_Basler_ExposureTimeAbs, //设置相机的曝光时间

Type_Basler_GainRaw, //设置相机的增益

Type_Basler_AcquisitionFrameRateAbs, //设置相机的频率

Type_Basler_Width, //图片的宽度

Type_Basler_Height, //图片的高度

Type_Basler_LineSource, //灯的触发信号

};

void initSome();

void deleteAll();

QStringList cameras();

int OpenCamera(QString cameraSN);

int CloseCamera();

void setExposureTime(double time); // 设置曝光时间

int getExposureTime(); // 获取曝光时间

int getExposureTimeMin(); // 最小曝光时间

int getExposureTimeMax(); // 最大曝光时间

void setFeatureTriggerSourceType(QString type); // 设置种类

QString getFeatureTriggerSourceType(); // 获取种类:软触发、外触发等等

void setFeatureTriggerModeType(bool on); // 设置模式触发

bool getFeatureTriggerModeType(); // 获取模式触发

void SetCamera(SBaslerCameraControl::SBaslerCameraControl_Type index, double tmpValue = 0.0); // 设置各种参数

double GetCamera(SBaslerCameraControl::SBaslerCameraControl_Type index); // 获取各种参数

long GrabImage(QImage& image,int timeout = 2000);

long StartAcquire(); // 开始采集

long StopAcquire(); // 结束采集

signals:

void sigCameraUpdate(QStringList list);

void sigSizeChange(QSize size);

void sigCameraCount(int count);

void sigCurrentImage(QImage img);

private:

void UpdateCameraList();

void CopyToImage(CGrabResultPtr pInBuffer, QImage &OutImage);

private slots:

void onTimerGrabImage();

private:

CInstantCamera m_basler;

QStringList m_cameralist;

QString m_currentMode;

bool m_isOpenAcquire = false; // 是否开始采集

bool m_isOpen = false; // 是否打开摄像头

QSize m_size;

};

#endif // SBASLERCAMERACONTROL_H

源文件:

#include "sbaslercameracontrol.h"

#include

#include

SBaslerCameraControl::SBaslerCameraControl(QObject *parent) : QObject(parent)

{

}

SBaslerCameraControl::~SBaslerCameraControl()

{

}

void SBaslerCameraControl::initSome()

{

qDebug() << "SBaslerCameraControl: PylonInitialize initSome" ;

PylonInitialize();

CTlFactory &TlFactory = CTlFactory::GetInstance();

TlInfoList_t lstInfo;

int n = TlFactory.EnumerateTls(lstInfo);

TlInfoList_t::const_iterator it;

for ( it = lstInfo.begin(); it != lstInfo.end(); ++it ) {

qDebug() << "FriendlyName: " << it->GetFriendlyName() << "FullName: " << it->GetFullName();

qDebug() << "VendorName: " << it->GetVendorName() << "DeviceClass: " << it->GetDeviceClass() ;

}

UpdateCameraList();

emit sigCameraCount(n);

qDebug() << "SBasler Camera Count: " << n;

}

void SBaslerCameraControl::deleteAll()

{

//停止采集

if(m_isOpenAcquire) {

StopAcquire();

}

//关闭摄像头

CloseCamera();

//关闭库

qDebug() << "SBaslerCameraControl deleteAll: PylonTerminate" ;

PylonTerminate();

qDebug() << "SBaslerCameraControl deleteAll: Close&

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华睿相机Basler相机都有自己的SDK,这里分别介绍一下它们的C++开发例子。 华睿相机SDK开发例子: 1. 首先需要安装华睿相机SDK,并且添加SDK头文件和库文件到工程中。 2. 在代码中包含SDK的头文件,并且初始化SDK: ```c++ #include "MvCameraControl.h" int main() { // 初始化SDK MV_CC_DEVICE_INFO_LIST stDeviceList; memset(&stDeviceList, 0, sizeof(MV_CC_DEVICE_INFO_LIST)); MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE, &stDeviceList); if (stDeviceList.nDeviceNum == 0) { printf("No device found!\n"); return -1; } return 0; } ``` 3. 打开相机并设置相机参数: ```c++ // 打开相机 MV_CC_DEVICE_INFO* pstDeviceInfo = stDeviceList.pDeviceInfo[0]; void* handle = NULL; MV_CC_CreateHandle(&handle, pstDeviceInfo); MV_CC_OpenDevice(handle); // 设置相机参数 MV_CC_SetPixelFormat(handle, PixelType_Gvsp_RGB8_Packed); MV_CC_SetTriggerMode(handle, MV_TRIGGER_MODE_OFF); MV_CC_SetExposureTime(handle, 1000); ``` 4. 开始采集图像并保存: ```c++ // 开始采集图像 MV_CC_StartGrabbing(handle); MV_FRAME_OUT_INFO_EX stImageInfo = { 0 }; unsigned char* pData = NULL; MV_CC_GetImageForRGB(handle, pData, 1000, &stImageInfo); // 保存图像 cv::Mat matImage = cv::Mat(stImageInfo.nHeight, stImageInfo.nWidth, CV_8UC3, pData).clone(); cv::imwrite("image.jpg", matImage); ``` 5. 最后需要释放资源并关闭相机: ```c++ // 停止采集图像 MV_CC_StopGrabbing(handle); // 关闭相机并释放资源 MV_CC_CloseDevice(handle); MV_CC_DestroyHandle(handle); ``` Basler相机SDK开发例子: 1. 首先需要安装Basler相机SDK,并且添加SDK头文件和库文件到工程中。 2. 在代码中包含SDK的头文件,并且初始化系统: ```c++ #include <pylon/PylonIncludes.h> int main() { // 初始化系统 Pylon::PylonAutoInitTerm autoInitTerm; return 0; } ``` 3. 获取相机并设置相机参数: ```c++ // 获取第一个相机 Pylon::CInstantCamera camera(Pylon::CTlFactory::GetInstance().CreateFirstDevice()); // 设置相机参数 camera.Open(); camera.PixelFormat.SetValue(Pylon::PixelType_RGB8packed); camera.TriggerMode.SetValue(Pylon::TriggerMode_Off); camera.ExposureTime.SetValue(1000); ``` 4. 开始采集图像并保存: ```c++ // 开始采集图像 camera.StartGrabbing(Pylon::GrabStrategy_LatestImageOnly); Pylon::CGrabResultPtr ptrGrabResult; camera.RetrieveResult(1000, ptrGrabResult, Pylon::TimeoutHandling_ThrowException); // 保存图像 cv::Mat matImage = cv::Mat(ptrGrabResult->GetHeight(), ptrGrabResult->GetWidth(), CV_8UC3, (uint8_t*)ptrGrabResult->GetBuffer()).clone(); cv::imwrite("image.jpg", matImage); ``` 5. 最后需要释放资源并关闭相机: ```c++ // 停止采集图像 camera.StopGrabbing(); // 关闭相机并释放资源 camera.Close(); ``` 以上是华睿相机SDKBasler相机SDKC++开发例子,具体实现还需要根据自己的需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值