目录
一、前言
从今天开始,我会逐步把自己系列类型的博客进行完善,有很多人催我抓紧写数据结构的,写Opencv的,是啊,欠了挺多了,是该给大家继续完善啦。
今天主要给大家分享关于计算机视觉的开源库 OpenCV 的内容,现在人工智能比较火,所以带火了Python,但是编程语言毕竟是编程语言,想要真正从事人工智能,那就要开始想想从哪里入手,计算机视觉事一个不错的选择。
第一个学习笔记是教大家怎么配置:OpenCV配置。今天的就是基础操作了,即图像的操作。我们知道计算机视觉是用摄像头代替人眼睛进行识别,所以计算机视觉最重要的就是操作图像。如果大家想深入了解图像处理,有一本经典之作叫《数字图像处理》,很全面。如果只是希望使用一个OpenCV库,了解一些原理,直接看OpenCV就可以啦。
二、图像基本操作
图像基本操作包括加载,修改,显示,保存。
1、加载图像CV :: imread
1.加载图像是什么?
加载图象就是将图像进行读取,获取图像的信息,并存到一个Mat对象中,方便后续操作。
2.API
加载图像的API是imread,函数原型是:
Mat imread(const String& filename,int flags = IMREAD_COLOR);
函数参数含义如下:
//第一个参数表示图像文件名称,包括图像文件名及路径(相对路径或绝对路径)
//第二个参数,表示加载的图像是什么类型,支持常见的三个参数值:
// 1.IMREAD_UNCHANGED (<0) 表示加载原图,不做任何改变
// 2.IMREAD_GRAYSCALE ( 0)表示把原图作为灰度图像加载进来
// 3.IMREAD_COLOR (>0) 表示把原图作为RGB图像加载进来。
注:一般情况下,我们都默认调用一个参数,后面他默认调用一个参数,即原图加载。
如下面这个例子:
Mat src = imread("E:/image/circle.bmp");
2、创建窗口cv::namedWindow
1.创建窗口是什么?
在显示之前,我们首先需要创建一个窗口,用以显示图像,我们使用的是 namedWindow 这个 API,功能是创建一个OpenCV窗口,它是由OpenCV自动创建与释放,你无需取销毁它。
2.API
创建窗口的API是namedWindow,函数原型是:
namedWindow("Window Title", WINDOW_AUTOSIZE)
函数参数含义如下:
//第一个参数是窗口名称
//第二参数是Mat对象,常见有两种:
// 1.WINDOW_AUTOSIZE:会自动根据图像大小,显示窗口大小,不能人为改变窗口大小
// 2.WINDOW_NORMAL:跟QT集成的时候会使用,允许修改窗口大小。
注:一般情况下,我们都默认调用一个参数,后面他默认调用一个参数,即原图加载。
如下面这个例子:
namedWindow("input image", CV_WINDOW_AUTOSIZE);
或者这样:
#define INPUT_TITLE "input image" // 宏定义,原始图片
namedWindow(INPUT_TITLE, CV_WINDOW_AUTOSIZE);
目前这个函数也支持,直接用一来代替后面的参数,我们看一个示例吧!
namedWindow("src1", 1);
3、显示图像CV :: imshow
1.显示图像是什么?
显示图像就是将图像在黑窗体展现出来,让我们能够更加直观的看到我们读取到的图像及其处理后的效果。
2.API
显示图像的API是imshow,函数原型是:
imshow ( const String & winname, InputArray mat )
函数参数含义如下:
//第一个参数表示窗口的名称
//第二个参数,表示要显示的图像
如下面这个例子:
imshow("src1", src1);
4、修改图像 (cv::cvtColor)
1.修改图像是什么?
修改图像就是对图像进行一系列像素操作,把图像从一个彩色空间转换到另外一个色彩空间。
2.API
修改图像的API是cvtColor,函数原型是:
void cv::cvtColor (InputArray src,OutputArray dst,int code,int dstCn = 0 )
函数参数含义如下:
//第一个参数,表示输入图像:8位无符号的16位无符号(CV_16uc。…),或者单精确度浮点数。
//第二个参数,表示要输出图像,与输入图像有相同的尺寸和深度。
//第三个参数,表示图像转码方式,比如从三通道的彩图转向单通道的灰度图。
//第四个参数,通道数量的目标图像;如果该参数为0时,信道数代码和从SRC中自动得到。
如下面这个例子:
cvtColor(src1, src2, CV_RGB2GRAY);
5、保存图像 (cv::imwrite)
1.保存图像是什么?
保存图像文件到指定目录路径,但是有要求,只有8位、16位的PNG、JPG、Tiff文件格式而且是单通道或者三通道的BGR的图像才可以通过这种方式保存。而且,保存PNG格式的时候可以保存透明通道的图片。
2.API
保存图像的API是imwrite,函数原型是:
bool cv::imwrite(const String & filename,InputArray img,const std::vector<int> & params = td::vector< int >())
函数参数含义如下:
//第一个参数,表示保存时文件的名称。
//第二个参数,表示要要被保存的图像
//第三个参数,表示特定格式的图像编码。
如下面这个例子:
imwrite("src2.jpg", src2);
这会默认保存到与cpp相同的路径下,如果想指定路径,可以在第一个参数中加上路径,比如保存到D盘中的某个文件夹下:
imwrite("D:/image/src2.jpg", src2);
三、全部代码及结果展示
1、代码
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
void main()
{
Mat src1, src2;
src1 = imread("E:/image/hand.jpg");
namedWindow("src1", 1);
cvtColor(src1, src2, CV_RGB2GRAY);
imshow("src1", src1);
imshow("src2", src2);
imwrite("E:/image/src2.jpg", src2);
waitKey(0);
}
2、运行效果图
今天的内容就讲到这里啦,有什么问题,大家可以在下面留言哦!