〇.本文内容包括
opencv在Ubuntu上的安装,qt在Ubuntu上的安装,basler相机在Ubuntu系统上的使用与开发环境配置。qt示例工程说明如何获取pylon相机图片并用opencv显示。
版本概览:Ubuntu16.04,opencv3.4.0,gcc5.4.0,qt5.10.1,pylon5.0.11。
一.pylon相机的安装
1.连接相机
把basler相机接到usb3.0接口上,执行lsusb,寻找basler相机是否出现。
lsuab
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwVP0cVWvBnbixmSuJGasd1Y0Z0VhZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TMzkjNzAzM1ETMwMDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
2.安装basler安装软件包
https://www.baslerweb.com/cn/sales-support/downloads/software-downloads/pylon-5-0-11-linux-x86-64-bit-debian/
下载pylon_5.0.11.10914-deb0_amd64.deb,按deb包的方式安装。
安装成功后会出现pylonviewer程序,这时打开并不能连接相机,提示LIBUSB_ERROR_ACCESS。
这时执行如下命令:
sudo gedit /ect/udev/rules.d/-basler-cameras.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="2676", ATTRS{idProduct}=="ba02", MODE:="777", TAG+="uaccess", TAG+="udev-acl"
把MODE从666改到777,保存并退出,重启udev。
sudo /etc/init.d/udev restart
这时可以用pylonviewer连接相机。
安装开发套件
https://www.baslerweb.com/en/sales-support/downloads/software-downloads/pylon-5-0-11-linux-x86-64-bit/
下载pylon 5.0.11 Camera Software Suite Linux x86 (64 bit)文件,阅读帮助文件安装。
帮助文件建议安装到/opt/pylon5。
安装后在/opt/pylon5下能找到开发需要的包含文件和库文件。
二.Opencv的安装
1.参考资料
参考http://blog.csdn.net/atpalain_csdn/article/details/50828830中的方法安装。
linux系统Qt调用opencv的编译过程(ubuntu14.04 kylin+qt5.5+opencv2.4.10)
2.版本概述
Ubuntu16.04
gcc版本5.4.0
opencv版本3.4.0.
3.注意事项
在Ubuntu系统下一般是利用源码安装,没有像windows那样的编译好的自解压文件。
网上有说要降低gcc版本,但在编译过程中使用5.x.x版本的gcc也没有出现问题。
原文中在cmake时设置如下参数:
在编译过程中出现如下错误:
猜测是选项开的太多,有些不支持导致编译失败。于是一切从头来过
cmake是的参数只留WITH_QT,如下:
最后编译成功。
三.Qt的安装
qt各版本下载地址:http://download.qt.io/archive/qt/
最好下载离线安装版,在线版安装速度慢,经常安装到一半出错。这里使用的是:
qt-opensource-linux-x64-5.10.1.run.
安装方法http://blog.csdn.net/xungjhj/article/details/71600437,ubuntu下安装QT5.7.1
四.测试工程
新建qt工程,在main.cpp中添加代码
首先从pylon相机获取一幅图片,然后使用opencv进行显示。
#include "mainwindow.h"
#include <QApplication>
#include <pylon/PylonIncludes.h>
#include <opencv.hpp>
using namespace cv;
using namespace Pylon;
using namespace std;
static const uint32_t c_countOfImagesToGrab = ;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
//=============================================
int exitCode = ;
PylonInitialize();
IplImage pImage;
CPylonImage target;
try
{
CInstantCamera camera( CTlFactory::GetInstance().CreateFirstDevice());
cout << "Using device " << camera.GetDeviceInfo().GetModelName() << endl;
camera.MaxNumBuffer = ;
camera.StartGrabbing( c_countOfImagesToGrab);
CGrabResultPtr ptrGrabResult;
while ( camera.IsGrabbing())
{
camera.RetrieveResult( , ptrGrabResult, TimeoutHandling_ThrowException);
if (ptrGrabResult->GrabSucceeded())
{
CImageFormatConverter converter;
converter.OutputPixelFormat=PixelType_RGB8packed;
converter.OutputBitAlignment=OutputBitAlignment_MsbAligned;
converter.Convert(target,ptrGrabResult);
Mat Image(target.GetHeight(),target.GetWidth(),CV_8UC3,target.GetBuffer(),Mat::AUTO_STEP);
ptrGrabResult.Release();
namedWindow( "image");
imshow( "image", Image );
waitKey();
}
else
{
cout << "Error: " << ptrGrabResult->GetErrorCode() << " " << ptrGrabResult->GetErrorDescription() << endl;
}
}
}
catch (const GenericException &e)
{
cerr << "An exception occurred." << endl << e.GetDescription() << endl;
exitCode = ;
}
cerr << endl << "Press Enter to exit." << endl;
while( cin.get() != '\n');
PylonTerminate();
//=================================================================
return a.exec();
}