目录
在Ubuntu系统上进行程序代码的GDB调试
创建一个gdb文件
mkdir gdb
进入gdb文件
cd gdb
创建一个test1.c文件
touch test1.c
编辑代码
vim test1.c
#include <stdio.h>
void ShowRevertNum(int iNum)
{
while (iNum > 10)
{
printf("%d", iNum % 10);
iNum = iNum / 10;
}
printf("%d\n", iNum);
}
int main(void)
{
int iNum;
printf("Please input a number :");
scanf("%d", &iNum);
printf("After revert : ");
ShowRevertNum(iNum);
}
gcc编译test1.c
gcc -o test1 -g test1.c
进入调试
gdb test1
l命令查看代码
list 查看剩下代码
b设置断点
b 10//在第十行设置断点
b ShowRevertNum//根据在函数名设置断点
info b 查看断点信息
info b//查看断点信息
run 运行程序
run //运行程序
print 打印值
print //打印值
s单步运行
s//单步运行
在Ubuntu16/18系统下编译、安装著名的C/C++图像处理开源软件库 Opencv3.x
Ubuntu系统下载安装OpenCV-3.4.10
OpenCV-3.4.10下载:https://opencv.org/releases/(因为是在github,下载速度很慢,还容易失败,所以需要多试几次)
在Ubuntu下载好opencv后,将文件放到home目录下
解压
unzip opencv-3.4.10.zip
进入解压后的文件目录
cd opencv-3.4.10
安装依赖库和cmake (建议在这之前先更新下安装目录,sudo apt-get update
)
sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev
安装完cmake之后 ,创建编译文件夹,文件名称自取,尽量方便查找,然后进入文件夹
mkdir my_build_dir
cd my_build_dir
cmake一下
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
这里发现出现了错误,多方查找后发现这里需要安装g++才能编译c++
sudo apt-get install g++
再次cmake就成功了
执行命令,这里编译需要较长的时间,耐心等待
sudo make
安装
sudo make install
sudo make install 执行完毕后OpenCV编译过程就结束了,为了让系统能找到,这里需要配置一些OpenCV的编译环境,首先将OpenCV的库添加到路径
sudo gedit /etc/ld.so.conf.d/opencv.conf
在文件末尾添加(这里打开的文件可能是空白的,不用担心直接添加)
/usr/local/lib
保存回到命令行界面,执行如下命令使得刚才的配置路径生效
sudo ldconfig
配置bash
sudo gedit /etc/bash.bashrc
在最末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存,执行如下命令使得配置生效
source /etc/bash.bashrc
更新一下
sudo updatedb
至此所有的配置都已经完成,可以进行程序的编译了。
用opencv打开一张图片
创建一个 test.cpp 文件:
touch test.cpp
编辑以下代码:
#include<opencv2/opencv.hpp>
#include<math.h>
using namespace cv;
int main()
{
//像素操作
Mat src,dst;
src = imread("/home/shixiansheng/2.jpeg");
if(src.empty())
{
printf("can not load image \n");
return 0;
}
namedWindow("input");//创建窗口
imshow("input",src);//显示图片
cvtColor(src, dst, COLOR_BGR2GRAY);//将图片转为灰度图
namedWindow("output");
imshow("output",dst);
waitKey();
return 0;
}
编译test.cpp
g++ test.cpp -o test `pkg-config --cflags --libs opencv`
注意:这里用gcc test1.cpp -o test1 pkg-config --cflags --libs opencv
进行编译会报错,因为 gcc 主要是编译 C程序的,此时应用 g++;如果用 g++ 编译 C程序,它会直接调用 gcc 去编译
那么上述命令是如何获取 opencv 的头文件及链接lib库的路径的
具体说明请参考:pkg-config --cflags --libs
运行test
./test
发现还是报错了,这里我们就要根据错误提示进行操作了,看看是图片路径出现错误,还是环境出错了
按照提示,我们需要安装libgtk2.0-dev pkg-config
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config
重新cmake一下,我们先将前面的删除,否则会提示已经弄好
cd ~/opencv3.4.10/my_build_dir/
rm -rf *//该命令就是删除文件中所有东西
cmake(还是在先前建好的my_build_dir文件中,这就体现了创建一个单独文件的好处了,出了问题我们可以再修改)
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make -j4
sudo make install
然后重新编译运行一下,结果如下
使用opencv打开摄像头
创建一个test1.cpp
编辑代码如下:
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
//从摄像头读取视频
VideoCapture capture(0);
//循环显示每一帧
while (1)
{
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame;//读取当前帧
imshow("读取视频帧", frame);//显示当前帧
//waitKey(30);//延时30ms
if(waitKey(30)==27) //按esc键退出
{
break;
}
}
system("pause");
return 0;
}
编译
g++ test1.cpp -o test1 `pkg-config --cflags --libs opencv`
直接运行
./test1
发现报错了,运行不了,经过查找后才知道,没连接摄像头
所以我们需要配置
当摄像头的原点亮了后再编译运行test1
成功。
注意:程序中while循环里必须加上一个结束监控,否则程序运行后将无法退出,这是就只能重启了。
Mat是一个什么数据结构?
Mat是一个类。由两部分数据组成:矩阵头(包括矩阵尺寸、存储方法、存储地址等信息)和一个指向所有像素值的矩阵(根据所选存储方法不同,矩阵可以是不同的维数)的指针。