同城购物网站建设,上海集团网站制作,co域名,河南省住房城乡建设门户网站1.读取像素值
我们可以通过mat.ptruchar()获取图像某一行像素数组的指针。因此如果想要读取点(x50#xff0c;y0)#xff08;⚠️即(row0,col50)#xff09;的像素值#xff0c;可以这样做#xff1a;mat.ptruchar(0)[50]。
在本节将介绍另外几种直接读…1.读取像素值
我们可以通过mat.ptruchar()获取图像某一行像素数组的指针。因此如果想要读取点(x50y0)⚠️即(row0,col50)的像素值可以这样做mat.ptruchar(0)[50]。
在本节将介绍另外几种直接读取像素值的方法。
1.1.读取灰度图的像素值
方法一 1
2Scalar intensity1img.atuchar(y,x);
int intensity2img.atuchar(y,x);Scalar是一个由长度为4的数组作为元素构成的结构体。Scalar最多可以存储四个值没有提供的值默认是0。例如上述代码中intensity1[49,0,0,0]。
因为灰度图像是单通道因此也可以用int型。例如上述代码中intensity249。
方法二 1Scalar intensity3img.atuchar(Point(x,y));1.2.读取RGB图像的像素值 1
2
3Vec3b pnt1img.atVec3b(y,x);//例如[39, 41, 51]
Scalar pnt2img.atVec3b(y,x);//例如[39, 41, 51, 0]
Vec3b pnt3img.atuchar(y,x);//自动转换成灰度值例如[49,0,0]Vec3b的定义为typedef Vecuchar,3 Vec3b。
类似的还有Vec3f的定义为typedef Vecfloat, 3 Vec3f。
1.2.1.读取各个通道的亮度值
B int bluepnt1.val[0];int blueimg.atVec3b(y,x)[0];G int greenpnt1.val[1];int greenimg.atVec3b(y,x)[1];R int redpnt1.val[2];int redimg.atVec3b(y,x)[2]
2.修改像素值
2.1.灰度图像 1img.atuchar(y,x)128;2.2.RGB图像 1
2
3img.atVec3b(y,x)[0]128;//blue
img.atVec3b(y,x)[1]128;//green
img.atVec3b(y,x)[2]128;//red3.图像的“与、或、非、异或”操作
bitwise_and是对二进制数据进行“与”操作即对图像灰度图像或彩色图像均可每个像素值进行二进制“与”操作111,100,010,000
。bitwise_or是对二进制数据进行“或”操作即对图像灰度图像或彩色图像均可每个像素值进行二进制“或”操作1∣11,1∣01,0∣11,0∣00。bitwise_xor是对二进制数据进行“异或”操作即对图像灰度图像或彩色图像均可每个像素值进行二进制“异或”操作1∧10,1∧01,0∧11,0∧00。bitwise_not是对二进制数据进行“非”操作即对图像灰度图像或彩色图像均可每个像素值进行二进制“非”操作∼10,∼01
。
4.图像ROI区域的选择
限定ROI(region of interest)的位置和大小可以用Rect r(x,y,x_length,y_length)。例如 1
2Rect r(10,10,100,100);//cv::Rect
Mat dstimg(r);图像混合
1.线性混合操作
g(x)(1−α)f0(x)αf1(x) 其中α
的取值范围为01之间。
2.addWeighted
OpenCV中实现图像混合功能的API 1
2
3
4
5
6
7
8
9void cv::addWeighted(inputArray src1,//参数1:输入图像Mat-src1double alpha,//参数2:输入图像src1的alpha值inputArray src2,//参数3:输入图像Mat-src2double beta,//参数4:输入图像src2的beta值double gamma,//参数5:gamma值OutputArray dst,//参数6:输出混合图像int dtype-1//参数7:位图深度-1表示和原图一样)⚠️两张图像的大小和类型必须一致才可以。
上述API的功能就相当于dst(I)saturate(src1(I)*alphasrc2(I)*betagamma)gamma用于调节混合图像的亮度值或像素值。
3.add、multiply
图像src1和图像src2大小和类型均一样则两幅图像对应像素点的像素值相加得到混合后的新图像dstadd(src1,src2,dst)。
图像src1和图像src2大小和类型均一样则两幅图像对应像素点的像素值相乘得到混合后的新图像dstmultiply(src1,src2,dst)。