获取图像像素指针
CV_Assert(myImage.depth() == CV_8U )
Mat.ptr<uchar> (int i=0) 获取像素矩阵的指针,索引 i 表示第几行,从 0 开始计行数
获得当前行指针 const uchar *current = myImage.ptr<uchar>(row)
获取当前像素点 p (row,col) 的像素值 p(row,col) = current[col]
像素范围处理 saturate_cast<uchar>
saturate_cast<uchar>(-100) 返回 0
saturate_cast<uchar>(288) 返回 255
saturate_cast<uchar>(100) 返回 100
这个函数的功能是确保 RGB 值的范围在 0-255 之间
图像像素的运算操作
加法:
add(m1, m2, img);
减法:
subtract(m1, m2, img);
乘法:
multiply(m1,m2,img);
除法:
divide(m1, m2, img);
参数1:进行运算的图像1
参数2:进行运算的图像2
参数3:运算结果输出的图像
滚动条操作
int createTrackbar(const String& trackbarname, const String& winname,
int* value, int count,
TrackbarCallback onChange = 0,
void* userdata = 0);
createTrackbar("Value", "滚动条", &lightValue,maxValue,onTrack);
参数1:滚动条名称
参数2:滚动条所在的窗口名称
参数3:随滚动条改变的数值变量
参数4:滚动条数值改变的最大值(最小值默认 0)
参数5:响应滚动条数值改变的函数
参数6:附加传递的参数(任意类型)
图像位运算
bitwise_and(InputArray src1, InputArray src2,
OutputArray dst, InputArray mask = noArray());
参数1:进行运算的 图像1
参数2:进行运算的图像2
参数3:输出结果的图像
bitwise_and(m1,m2,img);
imshow(
"与运算", img);
bitwise_or(m1, m2, img);
imshow(
"或运算", img);
bitwise_xor(m1, m2, img);
imshow(
"异或运算", img);
bitwise_not(m2, img);
imshow(
"非运算", img);
使用 rectangle 绘制图像
rectangle(InputOutputArray img, Rect rec,
const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0);
参数1:要进行绘制的图像
参数2:要绘制的大小
参数3:图像的颜色
参数4:选择填充还是描边操作 <0 填充 >0描边
参数5:线型类型
参数6:对中心坐标和半径值中的小数位进行移位。
rectangle(m1,
Rect(150,150,80,80),
Scalar(255,255,0),-1,
LINE_8,0); // 绘制一个 左上角坐标为(150,150),宽80,高80,蓝色填充的图像
rectangle(m2,
Rect(200, 200, 80, 80),
Scalar(0, 255, 255), -1,
LINE_8, 0);
// 绘制一个 左上角坐标为(200,200),宽80,高80,黄色描边的图像
split(InputArray m, OutputArrayOfArrays mv):分离图像的通道
参数1:要进行分离的图像
参数2:接收分离后的通道数组
mixChannels(InputArrayOfArrays src, InputOutputArrayOfArrays dst,
const int* fromTo, size_t npairs):将图像通道进行混合
参数1:要进行混合的图像
参数2:混合后的输出图像
参数3:混合数组 例: int channel[] = {1,2,0,0,2,1} // 第一通道 1 2 混合,第二通道 0 0混合,第三通道 2 1混合
参数4:要混合的图像通道数