嵌入式系统程序调试—GDB调试,ubuntu下安装opencv和其编译。

一.GDB调试

1.查看是否安装了gdb

输入以下代码来查看是否安装了gdb

gdb -v

如果显示以下代码说明安装了,出现其它就是没有安装。可以上网搜寻gdb安装教程。
在这里插入图片描述

2.gdb的使用

先做准备工作,创建目录,创建.c文件,程序如下;

 mkdir ts
 cd ts
 touch ts1.c

编辑.c文件

 gedit ts1.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);
}

以上就是准备工作,下面开始使用gdb进行调试。
先使用gcc对其进行编译,这里因为需要进行gdb调试,所以多加了个-g。如下

 gcc -o ts1 -g ts1.c

开始调试

 gdb ts1

在这里插入图片描述
显示代码及其行号,
在这里插入图片描述
调试举例
a.通过行号和函数名设置断点;
在这里插入图片描述
b.查看所有断点信息;
在这里插入图片描述

c.执行程序
在这里插入图片描述

d.查看iNum类型
在这里插入图片描述

e.继续执行
在这里插入图片描述

f.打印iNum的值
在这里插入图片描述
退出gdb 只需要输入q然后enter就可以了。
大概操作就是这样,想详细了解其它命令的话可上网查找。

二.ubuntu下安装opencv-3.4.1及其编译

1.安装

1.1 先下载其压缩包。

在这里插入图片描述

1.2 将压缩包放到home目录底下,进行解压配置

打开终端模式,进行解压:

unzip opencv-3.4.1.zip

进入解压后的文件包中

 cd opencv-3.4.1
-virtual-machine:~/opencv-3.4.1$ 

接下来安装依赖库和cmake。
权限不够的话先输入sudo su进入root权限再执行以下命令。

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  

安装完成之后,创建文件夹,进行配置

 mkdir my_build_dir
 cd my_build_dir
-virtual-machine:~/opencv-3.4.1/my_build_dir$ 

cmake一下

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

执行命令

sudo make

这里推荐多线程会比较快

sudo make -j4

在这里插入图片描述
完成之后执行以下命令

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
1.3 进行编程

在opencv-3.4.1下新建目录,创建test.cpp

mkdir mytest
touch test.cpp

用gedit编辑器进行编程

sudo gedit test.cpp

程序代码:

#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
	CvPoint center;
    double scale = -3; 

	IplImage* image = cvLoadImage("lena.jpg");
	argc == 2? cvLoadImage(argv[1]) : 0;
	
	cvShowImage("Image", image);
	
	
	if (!image) return -1; 	center = cvPoint(image->width / 2, image->height / 2);
	for (int i = 0;i<image->height;i++)
		for (int j = 0;j<image->width;j++) {
			double dx = (double)(j - center.x) / center.x;
			double dy = (double)(i - center.y) / center.y;
			double weight = exp((dx*dx + dy*dy)*scale);
			uchar* ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3);
			ptr[0] = cvRound(ptr[0] * weight);
			ptr[1] = cvRound(ptr[1] * weight);
			ptr[2] = cvRound(ptr[2] * weight);
		}

	Mat src;Mat dst;
	src = cvarrToMat(image);
	cv::imwrite("test.png", src);

    cvNamedWindow("test",1);  	imshow("test", src);
	 cvWaitKey();
	 return 0;
}

g++编译

g++ test.cpp -o test `pkg-config --cflags --libs opencv`

这里的pkg-config就是一个用于获取库/模块的所有编译相关信息的命令,所以,这里的获取opencv头文件和链接lib库是因为这个命令的原因。pkg-config是从所有路径下的.pc文件获取信息。
编译成功后,执行
*

./test

注意:图片需要自己下载然后存在test.cpp同一目录下!!!
结果如图所示:
在这里插入图片描述

2. opencv的运用

进入opencv-3.4.1中

cd opencv-3.4.1

创建目录(这里直接用前面创建的目录),创建test2.cpp文件,输入下面代码

cd mytest
touch test2.cpp

test2.cpp中代码

#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture(0);
while(1)
{
Mat frame;
capture >> frame;
imshow("读取视频帧",frame);
waitKey(30);
}
system("pause");
return 0;
}

用g++进行编译

g++ test2.cpp -o test2 `pkg-config --cflags --libs opencv`

执行

./test2

结果如图:
在这里插入图片描述
可以看到成功打开了摄像头,关闭摄像头请按Ctrl+c。

2.1 对于test2.cpp中程序的问题的一些解答

1.如果要打开一个硬盘上的视频文件来播放,可以修改程序中语句

VideoCapture capture("name.mp4")

2.程序中Mat是一个类,可以分为两个部分矩阵头和指向像素数据的矩阵指针。waitkey是每一帧的显示时间,要是没有延时,就会弹出窗口一闪而过。
3.改善Ctrl+c关闭摄像头的方式,在里面加代码如下,就可以直接按esc关闭摄像头。

#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture(0);
while(1)
{
Mat frame;
capture >> frame;
imshow("读取视频帧",frame);
if(frme.empt())
{break;}
waitKey(30);
}
system("pause");
return 0;
}

摄像头问题

在这之前需要安装vmware-tools组件,不然找不到摄像头。
如果发现打不开摄像头,先去Windows用Win+r打开命令行输入services.msc,在里面找到VMware USB Arbitration Service双击,然后点击启动。
在这里插入图片描述
在这里插入图片描述
然后回到虚拟机
打开虚拟机
在这里插入图片描述
在里面查看就可以看到摄像头了Acer…,点击它然后点击连接在这里插入图片描述
虚拟机桌面右下角那个圆圈图案亮了就说明摄像头连接好了。
在这里插入图片描述
然后输入命令查看摄像头驱动安装,

ls /dev ideo*

然后安装摄像头采集软件

sudo apt-get install cheese

完成安装后执行

cheese

就可以打开摄像头。
如果发现摄像头黑屏,可以打开最底下的设置,在里面看到USB点击它切换版本,2.0换3.0 3.0换2.0.。如果还不行,求助百度。在这里插入图片描述

总结

在安装opencv的过程中还是出现了许多问题,比如在编辑其test.cpp文件时,因为多加了/导致test.cpp里无程序。后面编译的时候因为用gcc编译而出现问题,后来问老师然后用g++编译成功了,还有自己的虚拟机无摄像头,后来上网查找原因之后解决了问题,方法写在文章里。总的来说,这次收获很多,对于Linux的命令掌握更加熟练,希望以后还能保持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值