程序调试与opencv图像库

本文介绍了如何在Ubuntu系统上使用GDB进行程序调试,并详细阐述了安装OpenCV-3.4.10的过程,包括下载、解压、编译、安装以及配置环境。此外,还展示了如何利用OpenCV打开图片和摄像头,以及解决在运行过程中遇到的问题。
摘要由CSDN通过智能技术生成

在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是一个类。由两部分数据组成:矩阵头(包括矩阵尺寸、存储方法、存储地址等信息)和一个指向所有像素值的矩阵(根据所选存储方法不同,矩阵可以是不同的维数)的指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值