注明:由于本人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.youkuaiyun.com/article/details/84451066
Ubantu安装部分借鉴自
https://blog.youkuaiyun.com/ksws0292756/article/details/79511170
控制摄像头与简单视频处理部分借鉴自
https://www.cnblogs.com/little-monkey/p/7162340.html
以上!