一、Mat 像素统计技术

1 opencv 常用类和方法

1.1 Mat 类

Mat 是一个基本图像容器,也是一个类,数据由两个部分组成:
矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所
选存储方法的不同矩阵可以是不同的维数)的指针。

1.2 imread()



Mat imread( const String& filename, int flags = IMREAD_COLOR ); 
功能:读取图片文件中的数据 
参数: 
filename:图片路径 
flags:指定读取图片的颜色类型,注意:opencv 版本不同,宏可能不一样 
opencv3.2.0 中 
IMREAD_GRAYSCALE 值为 0,表示显示灰度图
IMREAD_COLOR 值为 1,表示显示原图 
返回值:Mat 类对象



1.3 imshow()



void imshow(const String& winname, InputArray mat); 
功能:显示照片 
参数: 
winname:显示照片窗口的名称 
mat:imread 的返回值 
返回值:无



1.4 waitKey()



int waitKey(int delay = 0) 
功能:在一个给定的时间内(单位 ms)等待用户按键触发,如果用户没有按下键,则一直阻塞 
参数: 
delay:用于设置在显示完一帧,图像后程序等待“delay”ms 再显示下一帧视频,如果 waitKey(0) 
则只会显示第一帧视频 
返回值:按键的 ASCII 码值



1.5 putText()



void putText( Mat& img, const string& text, 
Point org, int fontFace, 
double fontScale, 
Scalar color, 
int thickness=1, int lineType=8 ); 
功能:在图像上添加文字 
参数: 
img:待添加文字的图像 
text:字符串,不支持中文 
org:待写入的首字符左下角坐标 
fontFace:字体类型,FONT_HERSHEY_SIMPLEX ,FONT_HERSHEY_PLAIN ,FONT_HERSHEY_DUPLEX 等 
fontScale:字体大小 
color:字体颜色,颜色用 Scalar(BGR)表示
Thickness:字体粗细 
lineType:线型,默认值是 8 
返回值:无



2 opencv 代码编译




python opencv putText 字体设置 opencv puttext换行_权重


2.1 直接命令行编译


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


2.2 通过 Makefile 编译

从 opencv-3.2.0/samples/cpp/example_cmake/拷贝一个 CMakeLists.txt,将文中三处 example 改

成你的 cpp 文件名,并添加下面一行:


set(OpenCV_DIR /home/edu/ai/opencv-3.2.0/mybuild)


然后执行配置编译命令:


cmake . 
make


运行结果:


python opencv putText 字体设置 opencv puttext换行_卷积核_02


3 锐化操作

在对像素邻域进行计算时,通常用一个核心矩阵来表示。这个核心矩阵展现了如何将与计算相

关的像素组合起来,才能得到预期结果。针对本节使用的锐化滤波器,核心矩阵可以是这样的:


python opencv putText 字体设置 opencv puttext换行_卷积核_03


除非另有说明,当前像素用核心矩阵中心单元格表示,又叫卷积核或相关核,核心矩阵中的每

个单元格表示相关像素的乘法系数,结果像素通过核心矩阵得到的结果,即是这些乘积的累加。核

心矩阵的大小就是邻域的大小(这里是 3×3),计算过程如下


python opencv putText 字体设置 opencv puttext换行_卷积核_04


滤波处理接口 void filter2D()


void filter2D( InputArray src, OutputArray dst, int ddepth, InputArray kernel,Point anchor = Point(-1,-1), double delta = 0, int borderType = BORDER_DEFAULT ); 
功能:通过给定卷积核对图像进行滤波处理 
参数: 
src:源图像 
dst:与 src 相同大小、相同通道数的输出图像 
ddepth:目标图像期望的深度(一般保持和源图像一致) 
kernel:构造核心矩阵内核(协同图像传入 filter2D) 
delta:选填过滤后的像素(一般取缺省值 0) 
borderType:边框(一般取缺省值 BORDER_DEFAULT)


python opencv putText 字体设置 opencv puttext换行_权重_05


python opencv putText 字体设置 opencv puttext换行_卷积核_06


执行结果


python opencv putText 字体设置 opencv puttext换行_邻域_07


还可以做如下尝试


python opencv putText 字体设置 opencv puttext换行_卷积核_08


4 图像重叠操作

像素混合接口 void addWeighted()


void addWeighted(InputArray src1, double alpha, InputArray src2,double beta, double gamma, OutputArray dst, int dtype = -1); 
功能:图像合并处理,合并图片 
参数: 
src1: 源图像 1 
alpha: 图像的权重(0~1 之间) 
src2: 源图像 2 
beta: 第二张源图像的权重(一般为 1.0-alpha) 
gamma: 如果两张相加后亮度不理想 可以使用 gamma 使其亮度效果更好,设置亮度 
dst: 两张图像输出的目标图像 
dtype: 使用缺省值


python opencv putText 字体设置 opencv puttext换行_权重_09


python opencv putText 字体设置 opencv puttext换行_权重_10


执行结果


python opencv putText 字体设置 opencv puttext换行_卷积核_11


python opencv putText 字体设置 opencv puttext换行_权重_12


建议:该系列教程可参照本人视频对应观看!