每一个程序背后都站着一堆优秀的代码库

目录

 一、安装opencv

1.1 安装cmake

1.2 安装依赖环境

1.3 下载opencv3

2. 安装

2.1 解压文件

2.2 进入到解压后的文件夹下

2.3 进行cmake

2.4 进行编译

2.5 进行安装

3. 配置环境

3.1 修改ld.so.conf文件

3.2 修改bash.bashrc文件

4.检验是否安装成功

二、编写一个打开图片进行特效显示的代码

1.在opencv3.4.1下新建mytest文件夹 

2.创建test.cpp 

3.用g++编译

4.运行test

三、编写一个打开摄像头显示处理视频的程序代码 

1.参考代码1(最简语句版) 

1.1如果要求打开你硬盘上一个视频文件来播放,请问示例代码1第7行代码如何修改?

1.2在示例代码1第9行的while循环中,Mat是一个什么数据结构? 为什么一定要加一句waitKey延时代码,删除它行不行?

1.3示例代码1代码会在while循环中一直运行,你如果试图用鼠标关闭图像显示窗口,会发现始终关不掉。需要用键盘Ctrl+C 强制中断程序,非常不友好。如何改进?

2.参考代码2(改进版,打开摄像头采集图像并保存)

四、总结

参考


三. 每一个程序背后都站着一堆优秀的代码库。通过学习opencv图像库编程,了解如何借助第三方库函数完成一个综合程序设计。“学了opencv,妈妈再不担忧你不会图像编程啦!”。

    在VMware虚拟机Ubuntu系统下练习编译、安装著名的C/C++图像处理开源软件库 Opencv3.x 。安装成功后:

1. 编写一个打开图片进行特效显示的代码 test1.cpp(见opencv编程参考资料 );

  注意gcc编译命令:  gcc  test1.cpp  -o  test1  `pkg-config --cflags --libs opencv`

  请解释这条编译命令,它是如何获得opencv头文件、链接lib库文件的路径的?

2. 练习使用opencv库编写打开摄像头压缩视频的程序。参考示例代码1和示例代码2。并回答:

1)如果要求打开你硬盘上一个视频文件来播放,请问示例代码1第7行代码如何修改?

2)在示例代码1第9行的while循环中,Mat是一个什么数据结构? 为什么一定要加一句waitKey延时代码,删除它行不行?

3)示例代码1代码会在while循环中一直运行,你如果试图用鼠标关闭图像显示窗口,会发现始终关不掉。需要用键盘Ctrl+C 强制中断程序,非常不友好。如何改进?

 一、安装opencv

1.1 安装cmake

终端执行下面语句,安装cmake

sudo apt-get install cmake

1.2 安装依赖环境

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config

1.3 下载opencv3

(opencv4下面的安装方法可能不好使了就)

下载地址:Releases - OpenCV
点击Sources进行下载自己需要的版本

2. 安装

2.1 解压文件

解压后,将文件夹放自己喜欢的地方,我就放在了主目录~下

2.2 进入到解压后的文件夹下

(这里我将解压后的文件夹重新命为opencv3,这个随便,不是重点)
在opencv3文件夹下新建build文件夹

终端运行

mkdir build

进入build文件夹下

cd build

2.3 进行cmake

在build目录下运行

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

2.4 进行编译

接下来时一个漫长的等待过程,大概需要等30分钟,看运气,不要多虑

sudo make -j8

可以使用sudo make -j 8 sudo make -j4 、sudo make加快速度
我这里就使用sudo make -j 8了

2.5 进行安装

再执行

sudo make install

3. 配置环境

3.1 修改ld.so.conf文件

用gedit打开/etc/ld.so.conf
在文件中加上一行 /usr/loacal/lib
其中/user/loacal是opencv安装路径也就是makefile中指定的安装路

终端执行

sudo gedit /etc/ld.so.conf

输入:

include /usr/local/lib

保存退出,运行下面语句刷新库链接配置

sudo ldconfig

3.2 修改bash.bashrc文件

终端运行

sudo gedit /etc/bash.bashrc 

在文件末尾加入:

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

然后在命令行中输入刷新

source /etc/bash.bashrc

4.检验是否安装成功

在命令行中输入如下命令:

pkg-config opencv --modversion

 

如图所示,出现版本号就安装成功了。

二、编写一个打开图片进行特效显示的代码

1.在opencv3.4.1下新建mytest文件夹 

mkdir mytest
cd mytest

2.创建test.cpp 

vim 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("test1.png");
	//这里的test1.png是指原图片(待处理图片)
	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("test2.jpg", src);
	//test2.jpg是处理后的图片
    cvNamedWindow("test",1);  	imshow("test", src);
	 cvWaitKey();
	 return 0;
}

使用:wq保存并退出
注:文件和图片要放在同一目录下

3.用g++编译

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

4.运行test

./test

三、编写一个打开摄像头显示处理视频的程序代码 

1.参考代码1(最简语句版) 

#include<opencv2/opencv.hpp>
using namespace cv;

int main()
{
        //从摄像头读取视频
        VideoCapture capture(0);
        //循环显示每一帧
        while(1)
        {
                Mat frame;           //定义一个mat变量,用于存储每一帧图像
                capture >> frame;             //读取当前帧
                imshow("视频读取帧",frame);    //显示当前帧
                waitKey(30);                  //延时30ms
        }
        system("puase");
        return 0;
}

1.1如果要求打开你硬盘上一个视频文件来播放,请问示例代码1第7行代码如何修改?

第7行要改为VideoCapture capture(“视频名.mp4”);

1.2在示例代码1第9行的while循环中,Mat是一个什么数据结构? 为什么一定要加一句waitKey延时代码,删除它行不行?

Mat是一个矩阵,用来存放一帧图片的像素点,每个像素点对应一个RGB值,可以显示当前像素色块。
读帧时做一定延时是为了达到正常播放,据统计每秒显示 27、28帧时,是视频播放的最好状态。如果没有延时,那么运行后画面马上就消失了,还没看到画面就没了。所以waitKey函数必不可少,最好延时30ms左右

1.3示例代码1代码会在while循环中一直运行,你如果试图用鼠标关闭图像显示窗口,会发现始终关不掉。需要用键盘Ctrl+C 强制中断程序,非常不友好。如何改进?

此代码会在while循环中一直运行,你如果试图用鼠标关闭图像显示窗口,会发现始终关不掉。需要在终端用键盘Ctrl+C 强制中断程序,如果想要退出,可以在延时后面加一个break代码,如if(key == 27) break;//按下ESC退出整个程序

2.参考代码2(改进版,打开摄像头采集图像并保存)

创建一个 test3.cpp 。

test3.cpp

/*********************************************************************
打开电脑摄像头,空格控制视频录制,ESC退出并保存视频RecordVideo.avi
*********************************************************************/
#include<iostream>
#include <opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;

int main()
{
	//打开电脑摄像头
	VideoCapture cap(0);
	if (!cap.isOpened())
	{
		cout << "error" << endl;
		waitKey(0);
		return 0;
	}

	//获得cap的分辨率
	int w = static_cast<int>(cap.get(CV_CAP_PROP_FRAME_WIDTH));
	int h = static_cast<int>(cap.get(CV_CAP_PROP_FRAME_HEIGHT));
	Size videoSize(w, h);
	VideoWriter writer("RecordVideo.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25, videoSize);
	
	Mat frame;
	int key;//记录键盘按键
	char startOrStop = 1;//0  开始录制视频; 1 结束录制视频
	char flag = 0;//正在录制标志 0-不在录制; 1-正在录制

	while (1)
	{
		cap >> frame;
		key = waitKey(100);
		if (key == 32)//按下空格开始录制、暂停录制   可以来回切换
		{
			startOrStop = 1 - startOrStop;
			if (startOrStop == 0)
			{
				flag = 1;
			}
		}
		if (key == 27)//按下ESC退出整个程序,保存视频文件到磁盘
		{
			break;
		}

		if (startOrStop == 0 && flag==1)
		{
			writer << frame;
			cout << "recording" << endl;
		}
		else if (startOrStop == 1)
		{
			flag = 0;
			cout << "end recording" << endl;
			
		}
		imshow("picture", frame);
	}
	cap.release();
	writer.release();
	destroyAllWindows();
	return 0;
}

编译 test3.cpp 文件

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

 输出结果

./test3

至此,OpenCV的安装和使用就大功告成了,OpenCV 的许多功能可以百度一下。

四、总结

在VMware虚拟机Ubuntu系统下安装OpenCV耗费了太多的时间,光是下载就下载了快一个小时,什么时候国家能解除一点网络墙,或者建立以下镜像网站也行啊,每次去外网搜文献下载文件都要看运气

参考

Ubuntu20安装OpenCV3(图解亲测)_ubuntu 20 安装opencv3-CSDN博客

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值