• 图像的IO操作
    • 绘制直线

      1. // img:要绘制的图像
      2. // start,end:直线的起点和终点
      3. // color:线条的颜色
      4. // thickness:线条的宽度
      5. cv.line(img,start,end,color,thickness);
    • 绘制圆形

      // img:要绘制的图像
      // centerpoint,r:圆心和半径
      // color:线条的颜色
      // thickness:线条的宽度,为-1时生成闭合图案并填充颜色
      cv.circle(img,centerpoint,r,color,thickness);
      
    • 绘制矩形

      // img:要绘制的图像
      // leftupper,rightdown:矩形的左上角和右下角坐标
      // color:线条的颜色
      // thickness:线条的宽度
      cv.rectangle(img,leftupper,rightdown,color,thickness)
      
    • 向图像中添加文字

      // img:要绘制的图像
      // text:要写入的文本数据
      // station:文本放置的位置
      // font:字体
      // fontsize:字体大小
      // color:颜色
      // thickness:宽度
      // cv.LINE_AA:线性写入
      cv.putText(img,text,station,font,fontsize,color,thickness,cv.LINE_AA)
      
    • 创建图像

      img = np.zeros((512,512,3),np.uint8)  // 创建一个512*512的图像,3波段(BGR三通道),无符号整型的格式
      
    • 代码示例

    41c19c27f9bb8563a14c026d94a19cf.png

    • 获取并修改图像中的像素点

      // 获取某个像素点的值
      px = img[100,100]
      // 仅获取蓝色通道的强度值
      blue = img[100,100,0]  //最后的0表示BGR的B
      // 修改某个位置的像素值
      img[100,100] = (255,255,255)
      
    • 获取图像的属性

      img.shape // 图像的形状   =>  (256,256,3)  // 256row,256column,3通道
      img.size  // 图像的大小,表示共有多少个像素   => 256*256*3得到的像素数量
      img.dtype  // 图像的类型  => dtype('uint8')  // uint8类型
      
    • 图像通道的拆分与合并

      // 通道拆分
      b,g,r = cv.split(img);
      // 通道合并
      img = cv.merge((b,g,r));   // 获得彩色图像
      
    • 色彩通道的改变

      // input_img:进行转换的图像
      // flag:转化类型  =>  COLOR_BGR2GRAY: BGR -> GRAY     COLOR_BGR2HSV: BGR -> HSV
      cv.cvtColor(input_img,flag);
      
    • 图像的加法

      cv.add(img1,img2);  => // 要合并的两张图像
      
    • 图像的混合

      cv.addWeighted(img1,0.7,img2,0.3,0)  // 比例为7:3
      
    • 图像缩放 ```cpp // src:输入图像 // dsize:绝对尺寸,指定调整后图像大小 // fx,fy:相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可 // interpolation:插值方法 / * 插值:

        INTER_LINEAR  => 双线性插值法
        INTER_NEAREST => 最近邻插值
        INTER_AREA => 像素区域重采样(默认) 
        INTER_CUBIC => 双三次插值
      

      */ cv.resize(src,dsize,fx=0,fy=0,interpolation = cv2.INTER_LINEAR);

    // example: // rows,cols = kids.shape[:2]; // res = cv.resize(src,(2 cols,2 rows)) => 绝对坐标放大 // res = cv.resize(src,None,fx = 0.5,fy = 0.5) => 相对坐标缩小

    
    - **图像的平移**
    ```cpp
    // 参数
    // img:输入的图像
    // M: 2*3的移动矩阵 => 对于(x,y)处的像素点,要把它移动到(x + x1,y + y1)处时,M矩阵如下图。M设置为np.float32类型的Numpy数组就可以了
    // dsize:输出图像的大小
    // 注意,输出图像的大小,应该是(宽,高)的形式。width = 列数,height = 行数
    cv,warpAffine(img,M,dsize);
    // example
    // M = np.float32([[1,0,100],[0,1,50]]);  => 平移矩阵(创建一个矩阵,两个数组分别为X,Y)
    // dst = cv.warpAffine(img,M,(cols,rows));
    

    c0812942c411981f06e81d59bfb994b.png

    • 图像的旋转
      // 1、先获取旋转矩阵
      // 参数
      // center: 旋转中心
      // angle: 旋转角度
      // scale: 缩放比例
      cv.getRotationMatrix2D(center,angle,sacle); // => 返回旋转矩阵M
      // 2、调用cv.warpAffine完成图像的旋转
      // 示例:
      // ros,cols = img,shape[:2];
      // M = cv.getRotationMatrix2D((cols/2,rows/2),90,1);
      // dst = cv.warpAffine(img,M,(cols,rows));