获取图像像素指针
  
  
   
     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:要混合的图像通道数