opencv学习笔记

来源:互联网 发布:中俄贸易数据统计 编辑:程序博客网 时间:2024/06/10 08:40
总的来说,我们学习图像处理的就是从VS和OPENCV开始的。而在之前的学习中,我们使用了前人的通过图片或摄像头的人脸识别代码并顺利运行了程序。顺理成章地,接下来的阶段就是将这些代码给“吃透”,理解并吸收,掌握其中的知识。下面就是今天对于代码中几个重要组成部分的学习心得总结。


 一、命名空间

using namespace std;
using namespace cv;
指明下面的程序使用std,如果不用这句指明的话就要用std::string(string是std空间中定义的
也可以在全局空间中定义,只要名字空间不一样即可)否则可以默认名字空间中有std.便不用std::来修饰
它是C++新标准中有的,解决多人作编大程序时名字冲突问题。如果用#include<iostream.h>就不需写这句话(旧标准)。但是如果用#include<iostream>就必须要写。
同理:using namespace cv是调用opencv中标识符。
opencv中cout<<输出结果<<endl意义与printf(“”)相近,表示刷新并换行。表示的是输出矩阵结果,printf输出的是单个数值。


二、图像存储数据结构Mat类

常用的构造函数:
mat image1; //创建无初始化矩阵
mat image2(6,6,CV_8UC1); //创建6行6列类型为8位单通道矩阵
Mat(int rows,int cols,int type);//创建行数为rows,列数为col,类型为type的图像
mat image3(Size(7,7),CV_8UC3);//创建大小为7*7类型为8位3通道矩阵
mat image4(8,8,CV_32FC2,Scalar(1,2,3));//创建一个用1+3j填充的8*8复矩阵
mat image5(Size(9,9),CV_8UC3,Scalar(1,2,3));//创建大小为9*9类型为8位3通道矩阵
mat iamge6(image2);//将image2赋值给image6,共用数据对象,不会强制赋值
mat类构造函数中涉及类型type,type可以是CV_8UC1、CV_16SC1...、CV_64FC3等
8U表示8位无符号整数(0-255),16S表示16位有符号整数(-32768-32767),64F表示64位浮点double类型数据,C后面表示通道数(基本上,1个通道数相当于1个数值描述一个像素点,灰度图;3个通道数相当于用RGB三个颜色描述一个像素点,彩色图)
CV_[位数][带符号与否][类型前缀][通道数]
mat img = imread(“图片路径”);//读取文件
mat img =imread(“图片路径”,0);//载入灰度图,当0变为大于0的数时显示3通道彩色图片
imshow(“窗口名称”,前面定义的图片名);//窗口显示图片
imwrite(“图片名字.图片格式”,前面定义的图片名);//输出图像到文件
waitkey()延迟函数


通常计算机按照RGB方式存储3通道图像格式,而图像采集设备输出图像格式一般是BGR方式

对于实际场景下的图像显示来说,一般采用无符号8位整数CV_8U来显示灰度图像,表示像素灰度值从0到255。
1 0
原创粉丝点击