学习目标一
用gcc生成静态库和动态库
阅读、理解和学习材料“用gcc生成静态库和动态库.pdf”和“静态库.a与.so库文件的生成与使用.pdf”,请在Linux系统(Ubuntu)下如实仿做一遍。
(1)第一步编辑生成例子程序hello.h、hello.c、main.c
。
#ifndef HELLO_H
#define HELLO_H
void hello(const char *name);
#endif//HELLO_H
#include<stdio.h>
void hello(const char *name)
{
printf("Hello%s!\n",name);
}
#include"hello.h"
int main()
{
hello("everyone");
return 0;
}
(2)生成hello.o文件:
(3)由.o文件创建静态库
学习目标二
GCC编译器背后的故事
创建work8目录、hello.c文件
#include<stdio.h>
int main(void){
printf("Hello,World!/n");
return 0;
}
编译过程
(1)预处理
① 将所有的#define 删除,并且展开所有的宏定义,并且处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif 等。
② 处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置。
③ 删除所有注释“//”和“/* */”。
④ 添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。
⑤ 保留所有的#pragma 编译器指令,后续编译过程需要使用。
(2)编译
编译过程是对预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后生成相应的汇编代码。
(3)汇编
gcc -C hello.s -o hello.o
学习目标三
安装 OpenCV
下载 OpenCV 3.4.11 数据包
国内快速下载地址:https://www.bzblog.online/wordpress/index.php/2020/03/09/opencvdownload/
安装:
解压安装包
unzip opencv-3.4.11.zip
进入解压后的文件
cd opencv-3.4.11
安装cmake
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
2.播放视频
(1)创建 test3.cpp 文件
mkdir test3,cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
//从摄像头读取视频
VideoCapture capture("1.mp4");
//循环显示每一帧
while(1){
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame;//读取当前帧
if(frame.empty())//播放完毕,退出
break;
imshow("读取视频帧",frame);//显示当前帧
waitKey(30);//掩饰30ms
}
system("pause");
return 0;
}
(2)准备一个名为1.mp4的视频文件
(3)编译 test3.cpp 文件
(4)输出结果
./test3
(5)如果要求打开你硬盘上一个视频文件来播放,请问示例代码1第7行代码如何修改?
将代码改为:
VideoCapture capture("0");/1.mp4
(6)在第9行的while循环中,Mat是一个什么数据结构? 为什么一定要加一句waitKey延时代码,删除它行不行?
Mat是一个类。由两部分数据组成:矩阵头(包括矩阵尺寸、存储方法、存储地址等信息)和一个指向所有像素值的矩阵(根据所选存储方法不同,矩阵可以是不同的维数)的指针
WaitKey()函数的功能是是程序暂停,等待用户触发一个按键操作。不可以删除,若没有这句话,则显示图像的代码很快就执行过去了,所以要用WaitKey()来暂停
(7)此代码会在while循环中一直运行,你如果试图用鼠标关闭图像显示窗口,会发现始终关不掉。需要用键盘Ctrl+C 强制中断程序,非常不友好。如何改进?
设置一个固定的退出时间