开发环境:Unbuntu 18.04 LTS + ROS Melodic + ViSP 3.3.1
文章内容主要参考ViSP官方教学文档:https://visp-doc.inria.fr/doxygen/visp-daily/tutorial_mainpage.html
本文主要介绍了如何使用vpImageDraw类中定义的函数来绘制一张图片,并使用vpImageIo类中定义的函数来保存一张图片。下文借鉴了testImageDraw.cpp测试例程中的部分内容,但并不完全相同。首先,我们先要新建一个Visp工程(可以参考这篇博客ViSP学习笔记(三):新建Visp工程并使用CMake完成编译)
cd $VISP_WS
mkdir started
cd started
touch tutorial-image-draw.cpp
gedit tutorial-image-draw.cpp
在打开的文件中添加以下代码
#include <visp3/gui/vpDisplayGDI.h>
#include <visp3/gui/vpDisplayX.h>
#include <visp3/core/vpImageDraw.h> // 添加ImageDraw头文件,其中包含图像绘制相关的类
#include <visp3/core/vpFont.h> // 添加Font头文件,其中包含字体文本相关的类
#include <visp3/io/vpImageIo.h> // 添加ImageIO头文件,其中包含图像输入输出相关的类
int main()
{
vpImage<vpRGBa> I(480,640); // 创建一个大小为640*480的RGBa格式的图像I
try {
#if defined(VISP_HAVE_X11)
vpDisplayX d(I);
#elif defined(VISP_HAVE_GDI)
vpDisplayGDI d(I);
#endif
vpImagePoint ip1(100, 200); //定义点ip1在图像(200,100)位置处
vpImagePoint ip2(300, 400); //定义点ip2在图像(400,300)位置处
vpImageDraw::drawLine(I, ip1, ip2, vpColor::orange, 3);
// 在图像I上连接ip1和ip2两点绘制一条桔黄色的直线
vpImagePoint ip3(100, 200); //定义点ip3在图像(200,100)位置处
vpImageDraw::drawCircle(I, ip3, 80, vpColor::green, 3);
//在图像I上以ip3点为圆心,以80为半径绘制一个绿色的圆
vpImagePoint ip4(100, 400); //定义点ip4在图像(400,100)位置处
int w = 150; //定义w为150
int h = 80; //定义h为80
vpImageDraw::drawRectangle(I, vpRect(ip4, w, h), vpColor::yellow, false, 3);
//在图像I上以ip4点为左上角端点,以w为长,h为宽绘制一个黄色的矩形
vpImagePoint ip5(200, 200); //定义点ip5在图像(200,200)位置处
vpImageDraw::drawCross(I, ip5, 15, vpColor::blue, 1);
//在图像I上以ip5点为中心绘制一个蓝色的十字形
vpImagePoint ip6(200, 400); //定义点ip6在图像(400,200)位置处
vpFont font(32); // 定义一个高度为32的字体实例
font.drawText(I, "Test...", ip6, vpColor::white, vpColor::black);
// 在图像I上以ip6点为左上角端点,绘制一个黑底白字的文本框,文字内容为"Test..."
vpDisplay::setTitle(I, "My image");
vpDisplay::display(I);
vpDisplay::flush(I);
std::cout << "A click to quit..." << std::endl;
vpDisplay::getClick(I);
std::string filename = "canvas_color.png"; //定义要保存文件的名字
std::cout << "Save " << filename << std::endl;
vpImageIo::write(I, filename); // 把绘制的图像写入文件中保存
} catch (const vpException &e) {
std::cout << "Catch an exception: " << e.getMessage() << std::endl;
}
}
新建CMakeLists.txt文件
touch CMakeLists.txt
gedit CMakeLists.txt
在打开的文件中写入以下代码
project(tutorial-image)
cmake_minimum_required(VERSION 2.8.12.2)
find_package(VISP REQUIRED visp_core visp_io visp_gui)
set(tutorial_cpp
tutorial-image-draw.cpp
)
foreach(cpp ${tutorial_cpp})
visp_add_target(${cpp})
if(COMMAND visp_add_dependency)
visp_add_dependency(${cpp} "tutorials")
endif()
endforeach()
新建build文件夹(如果已经有了,无需重复新建),进入文件夹并完成工程配置
mkdir build
cd build
ccmake .. -DCMAKE_BUILD_TYPE=Release
点击两次“c”键和一次“g”键,生成Makefile文件。编译工程并执行程序
make
./tutorial-image-draw
结果如下图所示,并且在build文件夹中会生成一个名为canvas_color.png
的图片文件。
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。