opencv在Ubuntu上的安装,qt在Ubuntu上的安装,basler相机在Ubuntu系统上的使用与开发环境配置。qt示例工程说明如何获取pylon相机图片并用opencv显示。
版本概览:Ubuntu16.04,opencv3.4.0,gcc5.4.0,qt5.10.1,pylon5.0.11。
把basler相机接到usb3.0接口上,执行lsusb,寻找basler相机是否出现。
lsuab
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
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下能找到开发需要的包含文件和库文件。
参考http://blog.csdn.net/atpalain_csdn/article/details/50828830中的方法安装。
linux系统Qt调用opencv的编译过程(ubuntu14.04 kylin+qt5.5+opencv2.4.10)
Ubuntu16.04
gcc版本5.4.0
opencv版本3.4.0.
在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各版本下载地址: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();
}