3.矩阵的掩模操作
1.主要内容-了解怎样操作像素-获取图像像素指针-什么叫做掩膜操作2.常用API1.CV_Assert()函数CV_Assert()若括号中的表达式值为false,则返回一个错误信息。ssert 宏的原型定义在<assert.h>中, 其作用是如果它的条件返回错误, 则终止程序 执行,原型定义:#include <assert.h> void assert...
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
更多推荐
所有评论(0)