2020-10-31

1.如何在Ubuntu下安装OpenCV

很多小白对于在GitHub上下载OpenCV很成问题,因为GitHub上下东西超级慢,所以导入 GitHub上的opencv仓库,再从 gitee 上的仓库下载。详细过程如下。因为是在Ubuntu下做实验,所有操作都在Ubuntu桌面版上。
第一步,百度 GitHub 进入官网创建属于自己的账号。
在这里插入图片描述
我已经创好自己的账号了。
第二步,点击加号,点进 New repository
在这里插入图片描述
在这里插入图片描述
创建自己的仓库,将※号部分填完,点击创建仓库。
在这里插入图片描述
创建完成后,就进入自己的仓库了,然后将网址给复制下来,一会儿要导入gitee上。
第三步,百度gitee,进入官网同样要创建属于自己的账号,(以下为已经创好了账号)。
点击new repository。
在这里插入图片描述
鼠标滚到下边,点击import。
在这里插入图片描述
将该才的网址复制,点击new就完成了,就可以在gitee上享受高速下载了。
在这里插入图片描述
搜索OpenCV
在这里插入图片描述
点开箭头所示
在这里插入图片描述
点击github
在这里插入图片描述
选取自己所需版本下载即可。
在这里插入图片描述
配置环境参考学姐博客https://cungudafa.blog.csdn.net/article/details/84451066

2.使用OpenCV打开图片

建一个代码存放文件夹 code ,然后进入文件夹中。
在这里插入图片描述
gedit 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;
}

执行以下指令

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

形成图片
在这里插入图片描述

在这里插入图片描述

3. 使用OpenCV打开摄像头

获取摄像头权限

使用快捷键 Win + R ,输入 services.msc ,并回车。

4. 使用OpenCV打开视屏文件

查看是否开启
在这里插入图片描述
然后在设置虚拟机,USB调整为3.0.
在这里插入图片描述
选择 “ 虚拟机 ” ,再选择 “ 可移动设备 ” ,再选择 “ 自己的设备” ,最后点击 “ 连接 ” ,再弹出的窗口内点击 “ 确定 ” 。
在这里插入图片描述
播放视频
创建一个 test2.cpp 文件
在这里插入图片描述

gedit test2.cpp

复制以下代码


```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
	//从摄像头读取视频
	VideoCapture capture("man.mp4");
	//循环显示每一帧
	while(1){
		Mat frame;//定义一个Mat变量,用于存储每一帧的图像
		capture >> frame;//读取当前帧
		if(frame.empty())//播放完毕,退出
			break;
		imshow("读取视频帧",frame);//显示当前帧
		waitKey(30);//掩饰30ms
	}
	system("pause");
	return 0;
}

在这视频就不播放了,下载视频麻烦。

5. 通过摄像头采集并压缩成视频

录制视频

创建一个 test3.cpp
在这里插入图片描述

复制以下代码

#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
如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值