本博文由 youngpan1101 出品,转载请注明出处。
文章链接: http://blog.csdn.net/youngpan1101/article/details/72236744
作者: 宋洋鹏(youngpan1101)
邮箱: yangpeng_song@163.com
简介
借助 GDB-ImageWatch 插件可以在断点调试过程中查看 cv::Mat 矩阵各像素值,windows 系统下的 visual studio IDE 也有该插件的相关教程,可参考 【VS2013中 Image Watch 插件的使用(OpenCV)】,这里介绍如何在 ubuntu 上通过 qt 5 来调用该插件,以方便做图像处理方面的断点调试。
安装 Qt creator 5.4.2
【ref_1】
查看操作系统位数
$ sudo uname -m
若显示 i686,表示 32 位操作系统;显示 x86_64,表示 64 位操作系统。
下载安装文件
- 本系统是 64 位操作系统,下载对应的离线安装文件
【qt_download_link】【Baidu_Yun: qt-opensource-linux-x64-5.4.2.run】 修改权限
$ chmod u+x qt-opensource-linux-x64-5.4.2.run
通过命令安装
$ ./qt-opensource-linux-x64-5.4.2.run
然后弹出图形安装界面,自定义安装位置,其他的选择默认的安装即可。
- 安装完成之后,可能缺少构建套件
$ sudo apt-get install g++ vim make cmake
- 本系统是 64 位操作系统,下载对应的离线安装文件
安装 GDB-ImageWatch 插件
运行环境
- ubuntu 14.04
- qt creator 5.4.2
- gdb 自带的 7.7.1
插件依赖项安装
$ sudo apt-get install libpython3-dev libglew-dev python3-numpy python3-pip qt-sdk texinfo libfreetype6-dev libeigen3-dev
安装过程中可能会出现因为软件源的问题无法正常完成安装,我原来163的源就会出现不能正常安装的问题,然后换了 tsinghua 的源,重新运行上面的命令即可。
克隆安装包到自定义路径下【Baidu_Yun_Download】:
$ git clone https://github.com/csantosbh/gdb-imagewatch
编译 image-watch
$ cd <dir-to-gdb-imagewatch> $ mkdir build $ cd build $ qmake .. $ make -j4
make 过程中会出现下面的错误:
修改 [dir-to-gdb-imagewatch]/src/buffer.cpp 文件:Line 8: constexpr float Buffer::no_ac_params[8] = {1.0, 1.0, 1.0, 1.0, 0, 0, 0, 0}; 改成 const float Buffer::no_ac_params[8] = {1.0, 1.0, 1.0, 1.0, 0, 0, 0, 0};
继续运行 make 命令
$ make -j4 $ make install
建立 cmake 测试工程
CMakeLists.txt (这里使用的是 OpenCV 3.2 ,安装教程可参考 【 Ubuntu 14.04 安装 OpenCV-3.2.0】)
# 声明要求的 cmake 最低版本 cmake_minimum_required(VERSION 2.8) # 声明一个 DisplayImage 工程 project( DisplayImage ) # 设置编译模式 (Debug/Release/...) set(CMAKE_BUILD_TYPE "Debug") # 寻找OpenCV库 find_package( OpenCV 3.2 REQUIRED ) # 添加头文件 include_directories( ${OpenCV_INCLUDE_DIRS} ) # 生成可执行二进制文件 add_executable( DisplayImage DisplayImage.cpp ) # 链接OpenCV库 target_link_libraries( DisplayImage ${OpenCV_LIBS} )
DisplayImage.cpp
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> using namespace std; using namespace cv; int main(int argc, char** argv) { cv::Mat matTmp = cv::imread("../xiaowu_robot.jpg"); // 若读入的是 16 位的 png 深度图,则用下面的 cv::imread 加载方式 //cv::Mat matTmp = cv::imread("../xiaowu_robot.png", CV_LOAD_IMAGE_UNCHANGED); cv::namedWindow("Image", 1); if(matTmp.empty()){ std::cout << "can not load image" << std::endl; return -1; } cv::imshow("Image", matTmp); cv::waitKey(0); return 1; }
编译, 运行
$ cd build $ cmake .. $ make $ sudo ./DisplayImage
将工程导入 Qt Creator 并使用 ImageWatch 进行调试
打开工程(选中该工程的 CMakeLists.txt ,点击 Open)
设定用于编译的 build 文件夹路径
设定 cmake 构建过程中的形参(因为 CMakeLists.txt 文件里有 set(CMAKE_BUILD_TYPE “Debug”) ,这里的 Auguments 可以不填,否则需要输入 -DCMAKE_BUILD_TYPE=DEBUG )
菜单栏 >> Tools >> Options >> Debugger >> GDB >> Extra Debugging Helpers 设定(文件是之前 ImageWatch 插件 build 文件夹下的 gdb-imagewatch.py)
放置断点,进行调试
cv::Mat 矩阵的 RGB 是以 BGR 进行存储的,gdb-ImageWatch 断点加载的图像是按 BGR 来显示的,所以和原图会有色差。
若 Qt Creator 运行带参数的程序(下图的设置表示输入: $ ./DisplayImage text_for_test)
基本的调试操作到此结束。
使用桌面快捷方式开启 QtCreator
创建 startQt.sh 脚本(本系统的密码是 “12345”) 【 具体命令解释参考:Linux expect 用法】
#!/usr/bin/expect set timeout 5 spawn sudo /home/hwj/IDE/Qt5.4.2/Tools/QtCreator/bin/qtcreator expect "password" send "12345\r" interact
赋予脚本文件执行权限
$ sudo chmod +x startQt.sh
使用命令行创建桌面快捷方式
- 在 /usr/share/applications 创建 QtCreator_5.4.2.desktop(Exec=/home/hwj/IDE/Qt5.4.2/startQt.sh 就是前面新建的 startQt.sh 的路径,这里推荐 icon 制作网站)
[Desktop Entry] Encoding=UTF-8 Name=QtCreator_v5.4.2 Comment=QtCreator IDE Exec=/home/hwj/IDE/Qt5.4.2/startQt.sh Icon=/home/hwj/IDE/Qt5.4.2/QtCreator_5.4.2-2.ico Terminal=false StartupNotify=true Type=Application Categories=Application;
- 在 /usr/share/applications 创建 QtCreator_5.4.2.desktop(Exec=/home/hwj/IDE/Qt5.4.2/startQt.sh 就是前面新建的 startQt.sh 的路径,这里推荐 icon 制作网站)
开启 QtCreator
- 键盘 WIN 键,然后搜索 QtCreator_v5.4.2 并将其图标拖拽到桌面即可。
- 双击图标就可以打开 QtCreator, enjoy it!