c++/opencv/矩阵掩膜
老太君陪你学cv矩阵掩膜
矩阵掩膜可以说是学习OpenCV的第一个难题,我记得第一次学的时候也被下软了,后来发现其实挺简单的。
看到这先别怕,我来慢慢道来。
第一行:cols明显是int变量,src是Mat变量(在前面声明),因为Mat结构体变量名,所以src.cols-1是获取列数(总列数减一,因为最后一列·最开始一列·最后一行和最开始一行不用,所以去掉),src.channels(),也是一个结构体里的方法,获取图片的通道数,因为像素的通道数只与列有关所以相乘获得真正的像素列数。
第二行:就是获取通道数,备用。
第三行:获取图片高度即行数。
第四行:已知dst是Mat变量,但是空的,所以给它初始化一下,和src一样size和type。Mat::zeros的作用是初始化成全黑色,dst备用。
第五行:定义row计数器从一到rows-1,头尾去掉。
第六·七·八·九行:获取src该行·前一行·后一行指针和dst该行指针。(const uchar* abc =src.ptr(数),这个数为多少就获取多少行的指针)
第十行:内循环,对列操作。
第十一行:就是利用指针与数组共性进行操作。(算法:中间像素*5-上边的像素-下边的像素-左边的像素-右边的像素)
但是大家会发现这个代码是不完美的,还需要将像素值saturate_cast(第十一行等号左边的内容),这样才完成。