珠海网站建设报价小学最好的网站建设
1.读取像素值
我们可以通过mat.ptr<uchar>()获取图像某一行像素数组的指针。因此如果想要读取点(x=50,y=0)(⚠️即(row=0,col=50))的像素值,可以这样做:mat.ptr<uchar>(0)[50]。
在本节将介绍另外几种直接读取像素值的方法。
1.1.读取灰度图的像素值
👉方法一:
   |    | 
📌Scalar是一个由长度为4的数组作为元素构成的结构体。Scalar最多可以存储四个值,没有提供的值默认是0。例如上述代码中intensity1=[49,0,0,0]。
因为灰度图像是单通道,因此也可以用int型。例如上述代码中intensity2=49。
👉方法二:
   |    | 
1.2.读取RGB图像的像素值
   |    | 
Vec3b的定义为typedef Vec<uchar,3> Vec3b。
类似的还有,Vec3f的定义为typedef Vec<float, 3> Vec3f。
1.2.1.读取各个通道的亮度值
- B 
int blue=pnt1.val[0];int blue=img.at<Vec3b>(y,x)[0];
 - G 
int green=pnt1.val[1];int green=img.at<Vec3b>(y,x)[1];
 - R 
int red=pnt1.val[2];int red=img.at<Vec3b>(y,x)[2]
 
2.修改像素值
2.1.灰度图像
   |    | 
2.2.RGB图像
   |    | 
3.图像的“与、或、非、异或”操作
bitwise_and是对二进制数据进行“与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作,1&1=1,1&0=0,0&1=0,0&0=0
- 。
 bitwise_or是对二进制数据进行“或”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“或”操作,1∣1=1,1∣0=1,0∣1=1,0∣0=0- 。
 bitwise_xor是对二进制数据进行“异或”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“异或”操作,1∧1=0,1∧0=1,0∧1=1,0∧0=0- 。
 bitwise_not是对二进制数据进行“非”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“非”操作,∼1=0,∼0=1
- 。
 
4.图像ROI区域的选择
限定ROI(region of interest)的位置和大小可以用:Rect r(x,y,x_length,y_length)。例如:
   |    | 
图像混合
1.线性混合操作
g(x)=(1−α)f0(x)+αf1(x)
其中α
的取值范围为0~1之间。
2.addWeighted
OpenCV中实现图像混合功能的API:
   |    | 
⚠️两张图像的大小和类型必须一致才可以。
上述API的功能就相当于:dst(I)=saturate(src1(I)*alpha+src2(I)*beta+gamma),gamma用于调节混合图像的亮度值(或像素值)。
3.add、multiply
图像src1和图像src2大小和类型均一样,则两幅图像对应像素点的像素值相加得到混合后的新图像dst:add(src1,src2,dst)。
图像src1和图像src2大小和类型均一样,则两幅图像对应像素点的像素值相乘得到混合后的新图像dst:multiply(src1,src2,dst)。
