Ubuntu系统下练习使用opencv

一、程序代码的GDB调试

一般来说GDB主要有三大功能:
1、启动被调试函数
2、让被调试的程序在指定位置停止
3、当程序停住时,检查它的状态值

GDB的使用:
随便写一个程序:
在这里插入图片描述
用gcc编译c文件,再进入gdb调试模式
在这里插入图片描述
输入l,显示代码及行号
在这里插入图片描述
输入list继续显示余下代码
在这里插入图片描述
通过行号设置断点
在这里插入图片描述
通过函数名设置断点
在这里插入图片描述
用info b 命令查看所有断点信息
在这里插入图片描述
用run命令执行程序
在这里插入图片描述
用whatis命令查看n的类型
在这里插入图片描述
再用print打印n的值
在这里插入图片描述
用c命令继续执行程序
在这里插入图片描述
打印此时的n值
在这里插入图片描述
再用s命令进行单步调试
在这里插入图片描述

二、opencv的安装与使用

一、opencv3.4.1的安装
1、安装需要的包
(1)、sudo apt-get install build-essential
(2)、sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
(3)、sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff5-dev libdc1394-22-dev # 处理图像所需的包
(4)、sudo apt install python3-dev python3-numpy # python支持
(5)、sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
(6)、sudo apt-get install libxvidcore-dev libx264-dev # 处理视频所需的包
(7)、sudo apt-get install libatlas-base-dev gfortran # 优化opencv功能
(8)、sudo apt-get install ffmpeg

在这里插入图片描述
在这里插入图片描述
2、下载opencv-3.4.1.zip,再进行解压
官网(https://opencv.org/)
命令:unzip opencv-3.4.1.zip解压
3、安装opencv:打开解压后opencv3.4.1文件夹,打开终端输入mkdir build创建build文件夹,再cd build

(1)cd opencv-3.4.1

(2)mkdir build

(3)cd build

(4)cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local …

(5)sudo make -j6 j6:的意思是用4个核执行编译(查看CPU核心数:nproc) 此处较慢需要耐心等待,大概十来分钟

(6)sudo make install (需要管理员权限)

4、环境配置
sudo /bin/bash -c ‘echo “/usr/local/lib” > /etc/ld.so.conf.d/opencv.conf’
在这里插入图片描述
5、更新系统库
在这里插入图片描述
6、配置bash
在这里插入图片描述
在末尾添加:PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
在这里插入图片描述
保存退出。
7、执行下命令使配置生效
sudo source /etc/bash.bashrc
//激活配置然后更新database
sudo updatedb
如遇到下面问题:
在这里插入图片描述
解决方法:
在这里插入图片描述

8、所有配置完成,测试

cd到opencv-3.4.1/samples/cpp/example_cmake目录下,按顺序执行
(1)cmake .
(2)make
(3)./opencv_example
在这里插入图片描述
在这里插入图片描述
演示结果:
在这里插入图片描述
二、opencv3.4.1的使用
图片处理:
1、在opencv3.4.1文件夹里面建立xltest文件夹
2、进入xltest文件夹打开终端,创建调试程序test1.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;

}
在这里插入图片描述
再用gcc编译:
在这里插入图片描述
3、测试(图片要复制到xltest文件夹里面名字改为lena.jpg)
进入xltest文件夹里面打开终端输入./test1
在这里插入图片描述

在这里插入图片描述
opencv打开摄像头处理视频:
1、创建test2.cpp文件(vim 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;
}
在这里插入图片描述
2、编译test2.cpp文件
在这里插入图片描述
3、打开摄像头
在这里插入图片描述
4、摄像头成功拍摄照片
在这里插入图片描述
在这里插入图片描述

问题:
1)如果要求打开你硬盘上一个视频文件来播放,请问示例代码1第7行代码如何修改?
答:把括号里面改为要播放的文件名加引导。
2)在示例代码1第9行的while循环中,Mat是一个什么数据结构? 为什么一定要加一句waitKey延时代码,删除它行不行?
答:不行,可能需要缓冲时间吧。定义一个Mat变量,用于存储每一帧的图像。
3)示例代码1代码会在while循环中一直运行,你如果试图用鼠标关闭图像显示窗口,会发现始终关不掉。需要用键盘Ctrl+C 强制中断程序,非常不友好。如何改进?
答:我觉得可以加一个break代码。

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页