Opencv像素点操作--图像加减

opencv像素点操作方法有用at的动态地址访问,ptr指针的访问(ptr指针的处理速度比at快)


方法一:ptr指针的访问

Opencv像素点操作--图像加减Opencv像素点操作--图像加减

由于读取的是彩色图片,则有三个通道bgr,用ptr指针的方法是把一个像素点的三个通道拆成了三个数组,则在行数不变的 情况下,列数变为了像素点列数的三倍

*data是data数组的首地址,img.ptr<vec3b>(i)是第i行的首地址<vec3b>是彩色图像的类型<uchar>是灰度图的类型,那么data数组的各个元素以三为周期对应了各个像素点

j%3则取余对应了相应的bgr通道




方法二  at动态地址访问

Opencv像素点操作--图像加减

at动态地址访问,at操作来实现对特定点(i,j)像素值的读取与操作(写入),vec3b指的是unchar类型三通道(其实图像可以有4通道,最后一个是阿尔法通道),并暂存于对应像素点为数组名的[0],[1],[2]数组中




两种方法的彩色转素描

Opencv像素点操作--图像加减



Opencv像素点操作--图像加减

这两种方法的思路都是先把彩色图转化为灰度图,根据图像边缘像素值的突变把灰度值(255白-0黑)二值化(0和255)


效果图


Opencv像素点操作--图像加减Opencv像素点操作--图像加减


三:Mat矩阵类的加减运算与逻辑运算

Mat img1,img2;

Mat dst=img1+img2;

这种Mat类的加减实质上是两个Mat类相应位置像素的加减


//add(img1,img2,dst);//直接把两个图像相应点的像素值相加输出

//addWeighted(img1,0.1,img2,1,0,dst);//二四两个参数是对应图像的权重,及对应图像像素值*权重,再把两个相加,可以通过权重来改变图片显示的对比度



absdiff(img1,img2,dst);

这种方法与图像相减类似,但是若是上面的图像相减操作,若为负则对应的像素值为0,而这种方法若为负,则像素值为绝对值

这种方法可以用于缺陷检测等两个相似图像寻找不同点




图像的与或操作是把10进制的像素值变成二进制然后进行与或操作后转化为十进制