1.主要内容

-了解怎样操作像素
-获取图像像素指针
-什么叫做掩膜操作

2.常用API

1.CV_Assert()函数
CV_Assert()若括号中的表达式值为false,则返回一个错误信息。
ssert 宏的原型定义在<assert.h>中, 其作用是如果它的条件返回错误, 则终止程序 执行,原型定义:

#include <assert.h> void assert( int expression );
CV_Assert(myImage.depth() == CV_8U);    //确定图像是否为8位无符号类型

注意:windows也有一个assert函数
作用: assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:

#include <assert.h>
void assert( int expression );
assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。

2.Mat.ptr(int i=0) 函数

作用:获取像素矩阵的指针,索引i表示第几行,从0开始计行数。
获得当前行指针

const uchar*  current= myImage.ptr<uchar>(row );

3.获取当前像素点P(row, col)的像素值的函数

 p(row, col) =current[col]

4.像素范围处理(重要)的函数
作用:确保RGB值得范围在0~255之间
saturate_cast(-100),返回 0。
saturate_cast(288),返回255
saturate_cast(100),返回100
5.Mat::zeros函数
作用:图像的初始化
//对这个变量初始化,使得该变量的大小和类型与我所输入的图像一致

dst=Mat::zeros(src.size(),src.type());

6.获取程序运行时间的函数

Mat kernel =(Mat_<char>(3,3)<<0,-1,0, 
                              -1,5,-1,
                              0,-1,0);
t=(double)getTickCount();
filter2D(src,dst1,src.depth(),kernel);
t=((double)getTickCount()-t)/getTickFrequency();    
cout<<"Bilt-in filter2D time passed in seconds:  "<<t<<endl;

imshow("output",dst);                                                    

getTickCount():用于返回从操作系统启动到当前所经的计时周期数,看名字也很好理解,get Tick Count(s)。
getTickFrequency():用于返回CPU的频率。get Tick Frequency。这里的单位是秒,也就是一秒内重复的次数。
该方法精度较高,能精确到1ms左右

注意windows也有这样的函数,区别比较大,不过首字母大写GetTickCount()

首字母大写后,该函数即为windows编程自带的API函数了,也是统计时间用的,但是用起来的时候,返回的值直接就是ms.,其精度大概只有18ms左右。

使用时,应注意:

库文件:kernel32.dll
C/C++头文件:winbase.h
windows程序设计中可以使用头文件windows.h

3.掩膜操作即根据掩膜来重新计算每个像素的像素值

掩膜操作的API:

//定义掩膜
Mat kernel=(Mat_<float>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
filter2D(src,dst,-1,kernel);

其中src和dst是Mat类型变量、src.depth表示位图深度,有32、24、8等

4.课外资料汇总

矩阵的掩膜操作主要内容:什么是掩膜?掩膜的用法?掩膜运算的一个小实例
https://blog.csdn.net/weixin_40807247/article/details/80893385
OpenCV的基本矩阵操作与示例主要内容:创建与初始化、矩阵加减法、矩阵乘法、矩阵转置、矩阵求逆、矩阵非零元素个数、矩阵均值与标准差、矩阵全局极值及位置、其他矩阵运算函数列表
https://blog.csdn.net/iracer/article/details/51296631
Mat矩阵图像详解主要内容:Mat矩阵(图像容器)创建时CV_8UC1,CV_8UC2等参数详解、Mat矩 阵图像容器类创建Mat类对象常用的几种方法
https://blog.csdn.net/maweifei/article/details/51221259
opencv图像单通道、多通道理解channels
https://blog.csdn.net/hujiameihuxu/article/details/74892650
cv::getTickCount()与GetTickCount()的区别
https://blog.csdn.net/flyyufenfei/article/details/79207842

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐