Ubuntu14.04配置pylon及Opencv并抓取图像显示

Ubuntu14.04配置pylon及Opencv并抓取图像显示

文章目录

    • Ubuntu14.04配置pylon及Opencv并抓取图像显示
      • 软件工具
      • 安装Opencv
      • 配置pkg-config
      • 配置.conf文件
      • 安装Basler相机SDK
      • 配置.conf文件
      • 编写测试代码

软件工具

  • VMware WorkStations pro
  • Ubuntu14.04
  • opencv3.2.0
  • pylon5.2
  • 硬件Basler相机一台
  • Qt Creator

安装Opencv

​ Opencv安装可以从官网上直接下载安装,也可以通过下面的方式安装:

1、进入系统后打开命令行,使用wget下载OpenCV源码:

​ url:https://github.com/Itseez/opencv/archive/3.2.0.zip

sudo apt-get install wget
sudo wget https://github.com/Itseez/opencv/archive/3.2.0.zip

下载完之后,在/home/(系统帐号名)目录下可以看到已下载的文件(我的是/home/yhan)

2、解压ZIP源码文件

sudo apt-get install unzip
sudo unzip 3.2.0.zip

3、进入源码目录,创建release目录

cd opencv-3.2.0
mkdir release

4、安装依赖库

sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev 

5、进入release目录

​ 安装OpenCV时,所有的文件都会被放到这个release目录下

cd release

6、cmake编译OpenCV源码,安装所有的lib文件都会被安装到/usr/local/opencv3.2.0目录下

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.2.0 .. 

7、安装

sudo make install -j4

配置pkg-config

1、创建pkgconfig目录

mkdir /usr/local/pkgconfig

2、拷贝opencv.pc文件到pkgconfig目录

cp /usr/local/opencv3.2.0/lib/pkgconfig/opencv.pc /usr/local/pkgconfig/opencv3.2.pc

3.以管理员权限用vim打开bash

sudo vim ~/.bashrc

4.在文件最后一行添加环境变量

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/pkgconfig
export PKG_CONFIG_PATH

5、wq保存文件后,source文件(执行脚本)

source ~/.bashrc

6.测试pkgconfig

pkg-config --libs opencv3.2

结果如下:
在这里插入图片描述

以上摘自Ubuntu14.04安装OpenCV2.4.13(ZIP安装)

配置.conf文件

​ 在后续测试中,出现error while loading shared libraries: libopencv_core.so.X: cannot open shared object file: No such file的错误,这是因为链接器ld提示找不到库文件。ld默认的目录是/lib和/usr/lib,如果放在其他路径也可以,需要让ld知道库文件所在的路径。若不知道该文件所在的路径,可以执行

sudo find / -name "libopencv_core.so.3.2*"

​ 解决方法:在/etc/ld.so.conf.d中配置.conf

cd /etc/ld.so.conf.d/
touch opencv.conf
vim opencv.conf

​ 加入/usr/local/opencv3.2.0/lib即可。

​ 最后执行

sudo ldconfig -v

引用ubuntu opencv Error: cannot open shared object file: no such file or directory与OpenCV runtime error: "libopencv_core.so.3.2: cannot open shared object file: No such file or direct

安装Basler相机SDK

参考本人博文:Ubuntu环境下配置巴斯勒相机及相机测试

配置.conf文件

​ 同上

cd /etc/ld.so.conf.d/
touch pylon.conf
vim pylon.conf

​ 加入/opt/pylon5/lib64后执行sudo ldconfig -v

编写测试代码

代码摘自Linux系统调试basler Gige接口工业相机并用C++、OpenCV开发

/*
 * Grab.cpp
 *
 *  Created on: 2018年11月30日
 *      Author: wenhan
 */

#define saveImages 1
// Include files to use the PYLON API.
#include 
#ifdef PYLON_WIN_BUILD
#    include 
#endif
#include 
#include 
#include 

// Namespace for using pylon objects.
using namespace Pylon;

// Namespace for using cout.
using namespace std;
using namespace cv;

// Number of images to be grabbed.
static const uint32_t c_countOfImagesToGrab = 100;
//

int main(int argc, char* argv[])
{
	Mat src;
	CImageFormatConverter formatConverter;
    formatConverter.OutputPixelFormat = PixelType_BGR8packed;
    int grabbedlmages = 0;
    // 创建一个Pylonlmage后续将用来创建OpenCV images
    CPylonImage pylonImage;
    // The exit code of the sample application.
    int exitCode = 0;

    // Before using any pylon methods, the pylon runtime must be initialized.
    PylonInitialize();

    try
    {
        // Create an instant camera object with the camera device found first.
        CInstantCamera camera( CTlFactory::GetInstance().CreateFirstDevice());

        // Print the model name of the camera.
        cout << "Using device " << camera.GetDeviceInfo().GetModelName() << endl;

        // The parameter MaxNumBuffer can be used to control the count of buffers
        // allocated for grabbing. The default value of this parameter is 10.
        camera.MaxNumBuffer = 5;

        // Start the grabbing of c_countOfImagesToGrab images.
        // The camera device is parameterized with a default configuration which
        // sets up free-running continuous acquisition.
        camera.StartGrabbing( c_countOfImagesToGrab);

        // This smart pointer will receive the grab result data.
        CGrabResultPtr ptrGrabResult;

        // Camera.StopGrabbing() is called automatically by the RetrieveResult() method
        // when c_countOfImagesToGrab images have been retrieved.
        while ( camera.IsGrabbing())
        {
            // Wait for an image and then retrieve it. A timeout of 5000 ms is used.
            camera.RetrieveResult( 5000, ptrGrabResult, TimeoutHandling_ThrowException);

            // Image grabbed successfully?
            if (ptrGrabResult->GrabSucceeded())
            {
                // Access the image data.
                cout << "SizeX: " << ptrGrabResult->GetWidth() << endl;
                cout << "SizeY: " << ptrGrabResult->GetHeight() << endl;
                formatConverter.Convert(pylonImage, ptrGrabResult);
                src = cv::Mat(ptrGrabResult->GetHeight(), ptrGrabResult->GetWidth(), CV_8UC3, (uint8_t *) pylonImage.GetBuffer());
                //如果需要保存图片
                if (saveImages)
                {
                   std::ostringstream s;
                    // 按索引定义文件名存储图片
                   s << "/home/wenhan/img/image_" << grabbedlmages << ".jpg";
                   std::string imageName(s.str());
                    //保存OpenCV image.
                   imwrite(imageName, src);
                   grabbedlmages++;
                }
                //新建OpenCV display window.
                namedWindow("OpenCV Display Window", CV_WINDOW_NORMAL); // other options: CV_AUTOSIZE, CV_FREERATIO
                //显示及时影像.
                imshow("OpenCV Display Window", src);
                waitKey(1);
                const uint8_t *pImageBuffer = (uint8_t *) ptrGrabResult->GetBuffer();
                cout << "Gray value of first pixel: " << (uint32_t) pImageBuffer[0] << endl << endl;

#ifdef PYLON_WIN_BUILD
                // Display the grabbed image.
                Pylon::DisplayImage(1, ptrGrabResult);
#endif
            }
            else
            {
                cout << "Error: " << ptrGrabResult->GetErrorCode() << " " << ptrGrabResult->GetErrorDescription() << endl;
            }
        }
    }
    catch (const GenericException &e)
    {
        // Error handling.
        cerr << "An exception occurred." << endl
        << e.GetDescription() << endl;
        exitCode = 1;
    }

    // Comment the following two lines to disable waiting on exit.
    cerr << endl << "Press Enter to exit." << endl;
    while( cin.get() != '\n');

    // Releases all pylon resources.
    PylonTerminate();

    return exitCode;
}

qt creator新建项目,将上面代码加入至main.c中,并在.pro文件中添加如下
INCLUDEPATH += /usr/local/opencv3.2.0/include \
/usr/local/opencv3.2.0/include/opencv \
/usr/local/opencv3.2.0/include/opencv2 \
/opt/pylon5/include \
/opt/pylon5/include/pylon

LIBS += /usr/local/opencv3.2.0/lib/libopencv_calib3d.so \
/usr/local/opencv3.2.0/lib/libopencv_calib3d.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_calib3d.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_core.so \
/usr/local/opencv3.2.0/lib/libopencv_core.so.3.2 \
/usr/local/opencv3.2.0/lib/libopencv_core.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_features2d.so \
/usr/local/opencv3.2.0/lib/libopencv_features2d.so.3.2 \
/usr/local/opencv3.2.0/lib/libopencv_features2d.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_flann.so \
/usr/local/opencv3.2.0/lib/libopencv_flann.so.3.2 \
/usr/local/opencv3.2.0/lib/libopencv_flann.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_highgui.so \
/usr/local/opencv3.2.0/lib/libopencv_highgui.so.3.2 \
/usr/local/opencv3.2.0/lib/libopencv_highgui.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_imgcodecs.so \
/usr/local/opencv3.2.0/lib/libopencv_imgcodecs.so.3.2 \
/usr/local/opencv3.2.0/lib/libopencv_imgcodecs.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_imgproc.so \
/usr/local/opencv3.2.0/lib/libopencv_imgproc.so.3.2 \
/usr/local/opencv3.2.0/lib/libopencv_imgproc.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_ml.so \
/usr/local/opencv3.2.0/lib/libopencv_ml.so.3.2 \
/usr/local/opencv3.2.0/lib/libopencv_ml.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_objdetect.so \
/usr/local/opencv3.2.0/lib/libopencv_objdetect.so.3.2 \
/usr/local/opencv3.2.0/lib/libopencv_objdetect.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_photo.so \
/usr/local/opencv3.2.0/lib/libopencv_photo.so.3.2 \
/usr/local/opencv3.2.0/lib/libopencv_photo.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_shape.so \
/usr/local/opencv3.2.0/lib/libopencv_shape.so.3.2 \
/usr/local/opencv3.2.0/lib/libopencv_shape.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_stitching.so \
/usr/local/opencv3.2.0/lib/libopencv_stitching.so.3.2 \
/usr/local/opencv3.2.0/lib/libopencv_stitching.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_superres.so \
/usr/local/opencv3.2.0/lib/libopencv_superres.so.3.2 \
/usr/local/opencv3.2.0/lib/libopencv_superres.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_video.so \
/usr/local/opencv3.2.0/lib/libopencv_video.so.3.2 \
/usr/local/opencv3.2.0/lib/libopencv_video.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_videoio.so \
/usr/local/opencv3.2.0/lib/libopencv_videoio.so.3.2 \
/usr/local/opencv3.2.0/lib/libopencv_videoio.so.3.2.0 \
/usr/local/opencv3.2.0/lib/libopencv_videostab.so \
/usr/local/opencv3.2.0/lib/libopencv_videostab.so.3.2 \
/usr/local/opencv3.2.0/lib/libopencv_videostab.so.3.2.0 \
/opt/pylon5/lib64/libbxapi-5.2.0.so \
/opt/pylon5/lib64/libbxapi.so \
/opt/pylon5/lib64/libFirmwareUpdate_gcc_v3_1_Basler_pylon_v5_1.so \
/opt/pylon5/lib64/libGCBase_gcc_v3_1_Basler_pylon_v5_1.so \
/opt/pylon5/lib64/libGCBase_gcc_v3_1_Basler_pylon.so \
/opt/pylon5/lib64/libGenApi_gcc_v3_1_Basler_pylon_v5_1.so \
/opt/pylon5/lib64/libGenApi_gcc_v3_1_Basler_pylon.so \
/opt/pylon5/lib64/libgxapi-5.2.0.so \
/opt/pylon5/lib64/libgxapi.so \
/opt/pylon5/lib64/liblog4cpp_gcc_v3_1_Basler_pylon_v5_1.so \
/opt/pylon5/lib64/libLog_gcc_v3_1_Basler_pylon_v5_1.so \
/opt/pylon5/lib64/libLog_gcc_v3_1_Basler_pylon.so \
/opt/pylon5/lib64/libMathParser_gcc_v3_1_Basler_pylon_v5_1.so \
/opt/pylon5/lib64/libMathParser_gcc_v3_1_Basler_pylon.so \
/opt/pylon5/lib64/libNodeMapData_gcc_v3_1_Basler_pylon_v5_1.so \
/opt/pylon5/lib64/libNodeMapData_gcc_v3_1_Basler_pylon.so \
/opt/pylon5/lib64/libpylonbase-5.2.0.so \
/opt/pylon5/lib64/libpylonbase.so \
/opt/pylon5/lib64/libpylonc-5.2.0.so \
/opt/pylon5/lib64/libpylonc.so \
/opt/pylon5/lib64/libpylon_TL_bcon-5.2.0.so \
/opt/pylon5/lib64/libpylon_TL_bcon.so \
/opt/pylon5/lib64/libpylon_TL_camemu-5.2.0.so \
/opt/pylon5/lib64/libpylon_TL_camemu.so \
/opt/pylon5/lib64/libpylon_TL_gige-5.2.0.so \
/opt/pylon5/lib64/libpylon_TL_gige.so \
/opt/pylon5/lib64/libpylon_TL_usb-5.2.0.so \
/opt/pylon5/lib64/libpylon_TL_usb.so \
/opt/pylon5/lib64/libpylonutility-5.2.0.so \
/opt/pylon5/lib64/libpylonutility.so \
/opt/pylon5/lib64/libuxapi-5.2.0.so \
/opt/pylon5/lib64/libuxapi.so \
/opt/pylon5/lib64/libXmlParser_gcc_v3_1_Basler_pylon_v5_1.so \
/opt/pylon5/lib64/libXmlParser_gcc_v3_1_Basler_pylon.so \

INCLUDEPATH为第三方库的路径,LIBS为动态连接库路径。

​ 编译并执行项目,结果如下:
Ubuntu14.04配置pylon及Opencv并抓取图像显示_第1张图片
​ 测试结束。

你可能感兴趣的:(Linux,Opencv,Ubuntu,Basler,Opencv)