一.ViSP库介绍:
ViSP是Visual Servoing Platform的简称,它是一个用于快速开发视觉伺服应用的c++库。ViSP由位于Inria Rennes的Inria Lagadic团队开发和维护。
ViSP 官方网站: https://visp.inria.fr
ViSP 维基百科: https://github.com/lagadic/visp/wiki
ViSP 在github上的源代码: https://github.com/lagadic/visp
Visp的软件架构
一个更详细的介绍可以参考官方网站:
http://visp-doc.inria.fr/doxygen/visp-daily/index.html
二.Windows下的安装:
在windows下只能以源码安装,
http://visp-doc.inria.fr/doxygen/visp-daily/tutorial_install_src.html
根据对应的vs版本选择教程
教程给的很详细,基本上按照步骤操作不会出现问题。
基本过程是按照需要安装各种必须和可选第三方库,其中opencv,矩阵运算,线性代数库等是必须得,其它比如要支持basler相机就要选择安装pylon第三方库等。安装完成后设置刚才安装的各种第三方库的环境变量,这样在编译ViSP主体的时候可以找到这些库。
三.Windows下的测试:
3.1.按照安装教程创建工程
安装完成后,按照教程跑通第一个显示图像的demo。
http://visp-doc.inria.fr/doxygen/visp-daily/tutorial-getting-started.html 。
按照官网的教程,在windows环境下开发步骤繁琐,要用cmake生成vs工程再编译,所以不推荐。
3.2.直接使用vs2015创建工程
在vs中新建空白vs控制台工程,把包含文件路径,库文件路径,附加依赖性设置好,这些都在make install生成的文件夹下。目前经过测试可以编译通过,但是在debug模式运行时出错,提示“应用程序无法正常启动(0xc000007b)”,在release模式下可以运行。
该问题目前还不能解决,但既然编译都通过了,应该不是什么大的问题。
具体代码展示:
头文件:
#include <visp3/gui/vpDisplayD3D.h>
#include <visp3/gui/vpDisplayGDI.h>
#include <visp3/gui/vpDisplayGTK.h>
#include <visp3/gui/vpDisplayOpenCV.h>
#include <visp3/gui/vpDisplayX.h>
#include <visp3/io/vpImageIo.h>
main函数:
int main()
{
vpImage<vpRGBa> I;
vpImageIo::read(I, "123.jpg");
vpDisplayGDI d(I, vpDisplay::SCALE_AUTO);
vpDisplay::setTitle(I, "My image");
vpDisplay::display(I);
vpDisplay::flush(I);
std::cout << "A click to quit..." << std::endl;
vpDisplay::getClick(I);
}
}
运行效果图:
一个在VS2015中使用visp库来显示jpg图片的的完整测试例程可以在CSDN或者github上下载。地址将在评论去上传。
四.Ubuntu系统下的安装:
在Ubuntu系统下有两种方法,apt-get方法和从源码安装方法,推荐后者。
4.1.apt-get方法
sudo apt-get install libvisp-dev
具体步骤参考教程:http://visp-doc.inria.fr/doxygen/visp-daily/tutorial-install-ubuntu-package.html
这种方法经过测试,有一些模块它没有默认安装,在编译教程提供的demo时会找不到头文件等。比如basler相机模块,采用这种方法安装的,在用grabber抓取相机图片时,将不能使用basler相机。
4.2.从源码安装方法
Ubuntu系统下的从源码安装臂windows下的简单,大部分第三方库的安装都是通过apt-get来安装。具体步骤参见教程。
http://visp-doc.inria.fr/doxygen/visp-daily/tutorial-install-ubuntu.html
在安装过程中用到ccmake,只是一个gui版本的cmake,可以设置开关编译某个模块,设置安装路径。
五.Ubuntu系统下的测试:
5.1.按照安装教程下载和编译工程
在Ubuntu系统下完全可以按照教程操作而不会出错。这里需要注意的是,如果ViSP是用apt-get方式安装的,那么有些demo可能编译通不过。所以在前一步推荐使用从源码安装。
http://visp-doc.inria.fr/doxygen/visp-daily/tutorial-image-display.html
5.2.在QT中使用visp库
demo测试完成后,和windows系统一样,希望在图像界面下开发。这里选择QT。找显示图片的demo,把代码放到qt自动生成的main.cpp中。在pro文件中加入visp安装后的库目录和指定版本的opencv的库目录。并且要把指定版本的opencv的库目录放到visp库目录前面。实际上据猜测,如果在系统中只安装了一个版本的opencv,那么不需要在pro文件中添加oepncv的库文件。而在目前所用的Ubuntu系统中,由于安装多个版本的ros,依赖不同的opencv版本,所用需要特别指定。并在/etc/ls.so.conf中加入这些库的路径后刷新。
具体代码实现:
头文件:
#include <visp3/blob/vpDot2.h>
#include <visp3/core/vpPixelMeterConversion.h>
#include <visp3/gui/vpDisplayGDI.h>
#include <visp3/gui/vpDisplayOpenCV.h>
#include <visp3/gui/vpDisplayX.h>
#include <visp3/io/vpImageIo.h>
#include <visp3/vision/vpPose.h>
#include <visp3/core/vpImage.h>
#include <visp3/gui/vpDisplayGDI.h>
#include <visp3/gui/vpDisplayOpenCV.h>
#include <visp3/gui/vpDisplayX.h>
#include <visp3/sensor/vpPylonFactory.h>
main函数:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
unsigned int opt_camera = 0;
std::string opt_device("USB");
vpPylonFactory &factory = vpPylonFactory::instance();
vpPylonGrabber *g;
g = factory.createPylonGrabber(vpPylonFactory::BASLER_USB);
vpImage<unsigned char> I;
vpImageIo::read(I, "square.pgm");
g->open(I);
try {
g->setCameraIndex(opt_camera);
vpDisplayOpenCV d(I);
while (1)
{
std::cout << "A new pic: ";
g->acquire(I);
std::cout << I.getHeight() << I.getWidth() <<std::endl;
vpDisplay::display(I);
if (vpDisplay::getClick(I, false))
break;
vpDisplay::flush(I);
vpTime::wait(40);
}
} catch (const vpException &e) {
std::cout << "Catch an exception: " << e.getMessage() << std::endl;
}
return a.exec();
}
一个在QT中使用visp库来抓取pylon相机的测试例程可以在CSDN或者github上下载。地址将在评论去上传。