嵌入式系统基础学习笔记(四)

目录

  • 一、GDB调试简例
    • 1.1 例1
    • 1.2 例2
  • 二、OpenCV入门
    • 2.1 在Windows下使用OpenCV-3.4.8
      • 2.1.1 OpenCV的安装与配置
      • 2.1.2 一个简单的OpenCV对图片特效显示例子
    • 2.2 在Ubuntu18.04下使用OpenCV-3.4.8
      • 2.2.1 OpenCV的安装与配置
      • 2.2.2 一个简单的OpenCV对图片特效显示例子
      • 2.2.3 用OpenCV调用摄像头录制视频
    • 2.3在树莓派下下使用OpenCV-3.4.8

作业要求:
1、在Ubuntu18.04下使用GDB调试一个简单的程序
2、学习在Windows、Ubuntu、树莓派下使用OpenCV对图片特效显示,利用OpenCV库编写打开摄像头、拍摄视频

一、GDB调试简例

1.1 例1

新建一个 gbdtest.c 文件,并通过gcc指令生成gbdtest文件,gbdtest.c代码如下
嵌入式系统基础学习笔记(四)_第1张图片


#include  
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 -o gdbtest -g gdbtest.c

tips:万万不可少加 -g 否则无法调试

接下来利用gdb调试该程序,图片很清晰,就不贴出指令段了

嵌入式系统基础学习笔记(四)_第2张图片
嵌入式系统基础学习笔记(四)_第3张图片
嵌入式系统基础学习笔记(四)_第4张图片

1.2 例2

新建一个 duantest.c 文件,进行段错误调试,源代码如下

嵌入式系统基础学习笔记(四)_第5张图片

#include 
#include 

#define BUFSIZE 256

static char acBuf[BUFSIZE];
static char *pStr;
int main(void)
{
	printf("please input a str:");
	gets(pStr);
	printf("\nU str is:%s\n", pStr);
}

如同例1,对duantest.c文件进行编译

嵌入式系统基础学习笔记(四)_第6张图片
直接执行后,可看到系统报错 “段错误 (核心已转储)”,接下来就开始进入gdb调试

嵌入式系统基础学习笔记(四)_第7张图片

二、OpenCV入门

2.1 在Windows下使用OpenCV-3.4.8

2.1.1 OpenCV的安装与配置

在 OpenCV 的官网获取 Windows版 和 Sources版 (之后在Ubuntu系统中要使用Sources版)
嵌入式系统基础学习笔记(四)_第8张图片
嵌入式系统基础学习笔记(四)_第9张图片下载好 Windows版 后,直接运行安装程序
嵌入式系统基础学习笔记(四)_第10张图片tips:安装完成后,需要配置系统环境变量:在path中添加以下路径:“X:\…\opencv3XX\opencv\build\x64\vc15\bin”

在VS中新建一个Visual C++空项目,这个项目就用来编写我们第一个OpenCV程序,但我们首先要配置它的环境。
嵌入式系统基础学习笔记(四)_第11张图片
在工程文件中新建一个 test.cpp 项
嵌入式系统基础学习笔记(四)_第12张图片
顺便把Debug类型调为x64

在这里插入图片描述
在 “属性管理器–>配置属性” 中修改 “包含目录” , “库目录” , “连接器/输入/添加依赖项”
嵌入式系统基础学习笔记(四)_第13张图片嵌入式系统基础学习笔记(四)_第14张图片嵌入式系统基础学习笔记(四)_第15张图片
嵌入式系统基础学习笔记(四)_第16张图片
嵌入式系统基础学习笔记(四)_第17张图片

这些路径都存在于OpenCV的安装路径下,修改好之后,就算是将工作环境搭建好了。

2.1.2 一个简单的OpenCV对图片特效显示例子

现在借鉴一个例子,目的是将照片灰度改变并显示,并自动保存改变灰度后的图片到项目工程文件夹中。
代码如下:

#include 
#include 
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
	CvPoint center;
	double scale = -3;
	IplImage* image = cvLoadImage("D://Code//testResourses//testimg.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;
}

嵌入式系统基础学习笔记(四)_第18张图片
编译运行


程序成功运行,并保存了改变灰度后的图片

嵌入式系统基础学习笔记(四)_第19张图片

2.2 在Ubuntu18.04下使用OpenCV-3.4.8

2.2.1 OpenCV的安装与配置

将之前下载好的 OpenCV Sources版 的压缩文件拷贝到Ubuntu系统下

嵌入式系统基础学习笔记(四)_第20张图片
在终端里键入以下命令解压缩 OpenCV文件夹

unzip opencv-3.4.8sourcestype.zip

嵌入式系统基础学习笔记(四)_第21张图片进入解压好的文件夹中,再创建一个编译文件夹,进入文件夹开始配置

mkdir build_dir
cd build_dir

执行 cMake 指令

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

嵌入式系统基础学习笔记(四)_第22张图片
执行make指令,等待编译完成

sudo make

tips:这一步可以写成 “sudo make -j4” 意为使用四线程进行编译,速度会很快

嵌入式系统基础学习笔记(四)_第23张图片
等待make编译完成后键入命令

sudo make install

等待完成后,我们就成功的安装了OpenCV,接下来我们配置OpenCV的编译环境

首先将OpenCV的库添加到系统路径
键入命令

sudo gedit /etc/ld.so.conf.d/opencv.conf

打开文件后添加一句

/usr/local/lib

嵌入式系统基础学习笔记(四)_第24张图片
保存后执行

sudo ldconfig

让刚才的配置路径生效

接下来键入命令配置bash

sudo gedit /etc/bash.bashrc

在最末尾添加

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

嵌入式系统基础学习笔记(四)_第25张图片
保存退出,键入以下命令让配置生效

source /etc/bash.bashrc

更新

sudo updatedb

嵌入式系统基础学习笔记(四)_第26张图片
tips:这一步很可以出现 “找不到命令 updatedb” 的错误,但是实测对之后的运行过程并无影响,最好还是参考
ubuntu命令updatedb报错: command not found解决方案
将错误解决

至此,环境配置结束,环境配置过程中可能出现许多问题,我给大家分享一些参考资料:
1.在 Ubuntu系统下安装 OpenCV 全过程
2.【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程
3.Linux配置OpenCV遇到的头文件路径的问题
4.ubuntu18.04 安装OpenCV3.4.1踩坑过程

2.2.2 一个简单的OpenCV对图片特效显示例子

紧接上一个过程,接下来用一个如同 2.1.2 的例子测试OpenCV

在 opencv-3.4.8 下新建文件夹 /test ,在 /test 文件夹下新建一个 test.cpp 文件,贴上以下代码

#include 
#include 
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
	CvPoint center;
    double scale = -3; 

	IplImage* image = cvLoadImage("testimg.jpg");
	//CV时不要忘记修改自己的图片名字
	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;
}

嵌入式系统基础学习笔记(四)_第27张图片
把图片放在 /home 目录下

mv testimg.jpg /home

在这里插入图片描述
接下来使用 gcc(g++) 编译即可成功得到test文件,直接运行 test 文件可成功得到结果

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

嵌入式系统基础学习笔记(四)_第28张图片

2.2.3 用OpenCV调用摄像头录制视频

首先用 Ubuntu 自带的 Cheess(茄子) 软件测试一下摄像头是否正常工作,若不是,请参考这里

嵌入式系统基础学习笔记(四)_第29张图片
借鉴 Ctrl C +V 一个开启摄像头并录制视频的例子,给它起名叫camtest.cpp

#include
#include
#include "highgui.h"
#include 
#include 
#include 
 
//#include 
//#include 
//#include 
//#include 
//#include 
//#include 
 
using namespace cv;
 
 
int main( int argc, char** argv )
{
	printf("I am start \n");
	VideoCapture cap(0); // open the default camera
	if(!cap.isOpened())  // check if we succeeded
		return -1;
 
	printf("%f, %f\n",cap.get(CV_CAP_PROP_FRAME_WIDTH),cap.get(CV_CAP_PROP_FRAME_HEIGHT));
	cap.set(CV_CAP_PROP_FRAME_WIDTH, 320);
	cap.set(CV_CAP_PROP_FRAME_HEIGHT, 240);
	cap.set(CV_CAP_PROP_FPS, 15);
	printf("%f, %f\n",cap.get(CV_CAP_PROP_FRAME_WIDTH),cap.get(CV_CAP_PROP_FRAME_HEIGHT));
	Mat src_gray;
	cvNamedWindow( "video", CV_WINDOW_AUTOSIZE );
 
	while(1)
	{
		Mat frame;
		cvWaitKey(10);
		cap >> frame;
		imshow("video", frame);
	}
 
 
	return 0;
}

键入指令编译生成可执行文件 camtest ,运行它

gcc camtest.cpp -o camtest pkg-config --cflags --libs opencv
./camtest

嵌入式系统基础学习笔记(四)_第30张图片

嵌入式系统基础学习笔记(四)_第31张图片
成功运行。

2.3在树莓派下下使用OpenCV-3.4.8

由于没有在 树莓派3B+ 上安装截图的工具,我仅仅贴上了运行结果的照片,安装 OpenCV 和配置环境的过程都与 Ubuntu 相仿,编译程序过程也是按部就班,所以请参照2.2的部分

嵌入式系统基础学习笔记(四)_第32张图片之后会更新"从零开始的树莓派":把树莓派从无感情的电路板装配成掌上电脑的过程,敬请期待。

你可能感兴趣的:(嵌入式系统基础学习日记,嵌入式,ubuntu,opencv)