pylonUSB3.0相机在Ubuntu16.04系统上使用opencv显示图像

〇.本文内容包括

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

pylonUSB3.0相机在Ubuntu16.04系统上使用opencv显示图像_第1张图片

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/69-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连接相机。
pylonUSB3.0相机在Ubuntu16.04系统上使用opencv显示图像_第2张图片

安装开发套件

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 -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..

在编译过程中出现如下错误:

internal compiler error: bus error

猜测是选项开的太多,有些不支持导致编译失败。于是一切从头来过
cmake是的参数只留WITH_QT,如下:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_C_EXAMPLES=ON -D WITH_QT=ON ..

最后编译成功。

三.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 
#include 
#include 

using namespace cv;
using namespace Pylon;
using namespace std;

static const uint32_t c_countOfImagesToGrab = 100;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    //=============================================
    int exitCode = 0;

    PylonInitialize();
    IplImage pImage;

    CPylonImage target;

    try
    {
        CInstantCamera camera( CTlFactory::GetInstance().CreateFirstDevice());
        cout << "Using device " << camera.GetDeviceInfo().GetModelName() << endl;
        camera.MaxNumBuffer = 5;
        camera.StartGrabbing( c_countOfImagesToGrab);
        CGrabResultPtr ptrGrabResult;
        while ( camera.IsGrabbing())
        {
            camera.RetrieveResult( 5000, 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(0);
            }
            else
            {
                cout << "Error: " << ptrGrabResult->GetErrorCode() << " " << ptrGrabResult->GetErrorDescription() << endl;
            }
        }
    }
    catch (const GenericException &e)
    {

        cerr << "An exception occurred." << endl << e.GetDescription() << endl;
        exitCode = 1;
    }

    cerr << endl << "Press Enter to exit." << endl;
    while( cin.get() != '\n');

    PylonTerminate();
    //=================================================================


    return a.exec();
}

pylonUSB3.0相机在Ubuntu16.04系统上使用opencv显示图像_第3张图片

你可能感兴趣的:(opencv,pylon)