视频图像处理——OpenCV库

注明:由于本人Ubantu系统安装有误,所以本文仅提供Windows上opencv库的应用

OpenCV库的安装

在此介绍Windows10与Ubantu18.04两种操作系统的安装过程

Windows

需要预先下载OpenCV3.4.1的安装包(官网或绿色软件网站皆可),然后解压文件,再点击下图所示应用程序进行库的安装
在这里插入图片描述
接下来需要配置系统环境变量
在这里插入图片描述
找到OpenCV包的安装位置
在这里插入图片描述
在系统环境变量汇总添加此目录,然后重启电脑

Ubantu18.04安装过程

在这里插入图片描述
键入pip install opencv-python之后系统提示pip语句有误,不过Ubantu提供了sudo apt的下载方法,只需按照提示输入即可
在这里插入图片描述
sudo apt需要开启root权限,输入密码即可
在这里插入图片描述
链接成功,等待二十分钟左右便可下载完成

图片灰度化

在这里插入图片描述
新建一个空项目用以实施图片灰度的处理
在这里插入图片描述
在新建项目中添加一个项
在这里插入图片描述
录入以上代码,达到打开图片的目的,这里需要将debug模式调整为x64,并且接下来还需要进行配置
在这里插入图片描述
在这里插入图片描述
右键项目—》属性—》VC++目录
在这里插入图片描述
包含目录需要添加的路径为此include文件夹以及下属两个opencv和opencv2的路径

在这里插入图片描述
再在库目录中添加opencv包解压好的build、x64、vc15、lib文件夹位置
在这里插入图片描述
在这里插入图片描述
配置完成如图
具体代码如下,此代码会对图片进行灰度化的循环,生成128、64、32、16、8、4以及01灰度图各一张

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>


using namespace std;
void quantizie(cv::Mat& input_img, int level);

#define LEVEL 2

int main()
{
	cv::Mat img = cv::imread("C://Users//86181//Pictures//timg.jpg", 0);
	cv::imshow("src", img);
	quantizie(img, LEVEL);

	return 0;
}

uchar get_value(int level, uchar v)
{
	int block_num = level - 1;
	int block_size = 256 / block_num;
	for (int i = 1; i <= block_num; i++)
	{
		if (v > block_size * i)
		{
			continue;
		}

		int mid_value = block_size * i / 2;
		int left = block_size * (i - 1);
		int right = block_size * i - 1;
		if (v < mid_value)
		{
			return left;
		}
		else
		{
			return right;
		}
	}

	return v;
}

void quantizie(cv::Mat& input_img, int level)
{
	cv::Mat output_img = input_img.clone();
	output_img.setTo(0);


	for (int i = 0; i < output_img.rows; i++)
	{
		uchar* p1 = input_img.ptr<uchar>(i);
		uchar* p2 = output_img.ptr<uchar>(i);
		for (int j = 0; j < output_img.cols; j++)
		{
			p2[j] = get_value(level, p1[j]);
			//p2[j] = (p1[j] / range) * range;
		}
	}

	cv::imshow("quantize", output_img);
	cv::imwrite("quantize.png", output_img);
	cv::waitKey();
}

在这里插入图片描述
256级灰度图片
在这里插入图片描述
128级灰度图片

网络摄像头与简单视频处理

具体代码如下

#include<opencv.hpp>
using namespace cv;

 void main() {
	     VideoCapture cap;
	     cap.open(0); //打开摄像头
	
		     if (!cap.isOpened())
		         return;
	
		     Mat frame;
	     while (1)
		     {
		         cap >> frame;//等价于cap.read(frame);
		         Canny(frame, frame, 30, 100);//canny边缘检测,去掉这一行就是纯粹的读取摄像头了
		         //cvtColor(frame, frame, CV_BGR2HSV);//BGR空间转为HSV颜色空间,注意,两者不能同时对同一张图片(在此为frame)进行处理,否则报错
			         if (frame.empty())
			             break;
		         imshow("video", frame);
		         if (waitKey(20)>0)//按下任意键退出摄像头  因电脑环境而异,有的电脑可能会出现一闪而过的情况
			             break;
		     }
	     cap.release();
	     destroyAllWindows();//关闭所有窗口
	
}

但本人在运行此代码时,出现了莫名其妙的错误
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如上图所示,错误类型为无法打开源文件,但实际上项目的包含目录是配置得当的,鉴于此错误未能得解,此处借用原博主的运行效果图
在这里插入图片描述
在这里插入图片描述
可以看到,原博主打开摄像头与视频处理是成功了的,第一张图是图像二值化,第二张则是BGR空间转为HSV颜色空间

引用

Windows安装部分和图片灰度化的预处理借鉴自https://cungudafa.blog.csdn.net/article/details/84451066
Ubantu安装部分借鉴自
https://blog.csdn.net/ksws0292756/article/details/79511170
控制摄像头与简单视频处理部分借鉴自
https://www.cnblogs.com/little-monkey/p/7162340.html
以上!

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