美文网首页
opencv python接口用法

opencv python接口用法

作者: gpfworld | 来源:发表于2019-08-17 14:45 被阅读0次

    python中使用opencv需要导入

    import cv2

    图像读写

    在python中,图像使用numpy数组表示。

    读写支持各种静态的图像文件格式(bmp,png, jpg, jpeg)
    img = cv2.imread( img_path , [*] )    读图像  返回的是一个numpy数组。格式(BGR)3通道,即使是灰度图。
    cv2.imwrite( img_path , img )    写图像。要求通道是(BGR)或者灰度格式。
    
    cv2.waitKey()   参数1:等待时间,单位毫秒。
    
    一般与cv2.imshow()搭配使用,另一个实用的功能就是通过按键进入if条件语句
    
    exp1:
    比如下面按ESC关闭窗口,退出循环,结束程序。
    cv2.imshow("Origin", image)
    key = cv2.waitKey(1)
    if key == 27:
        cv2.destroyAllWindows()
        break
    

    图像转换

    img = cv2.cvtColor( img, cv2.COLOR_GRAY2BGR)    将单通道图像,转变为3通道(BGR)
    
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)    转换为灰度图
    
    img.reshape(h,w,c)    重新定义数组的维度。 h , w , c 
    
    
    void resize(
                   InputArray src,                                //输入原图像
                   OutputArray dst,                               //输出结果图像
                   Size dsize,                                    //设定结果图像的尺寸
                   double fx = 0,                                 //在x轴上的缩放比例
                   double fy = 0,                                 //在y轴上的缩放比例
                   int interpolation = INTER_LINEAR               //差值方式(计算新图像的各点像素)
               );
    src:待变换输入原图,可以为单通道灰度图像,也可以为3通道彩色图像
    dsize:变换后的图像尺寸,格式:宽高通道;当dsize为0时,它可以通过以下公式计算得出:
    dsize = Size(round(fxs*rc.cols), round(fy*src.rows))
    fx - 水平轴上的比例因子。当它为0时,计算公式如下:(double)(dsize.width/src.cols)
    fy - 垂直轴上的比例因子。当它为0时,计算公式如下:(double)(dsize.heifht/src.rows)
    interpolation - 插值方法
    interpolation取值:INTER_NEAREST - 最近邻插值法
    interpolation取值:INTER_LINEAR - 双线性插值法(默认)
    interpolation取值:INTER_AREA - 基于局部像素的重采样(resampling using pixel area relation)。
    对于图像抽取(image decimation)来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似。
    interpolation取值:INTER_CUBIC - 基于4x4像素邻域的3次插值法
    interpolation取值:INTER_LANCZOS4 - 基于8x8像素邻域的Lanczos插值
    注意:参数dsize和参数(fx, fy)不能够同时为0
    
    
    通道分离
    void split(
                  const Mat& src,                                 //待分离的多通道矩阵
                  Mat* mvbegin                                    //矩阵数组,保存分离后的单通道矩阵
              );
    void split(
                  InputArray m,                                   //待分离的多通道矩阵
                  OutputArrayOfArrays mv                          //vector容器,保存分离后的单通道矩阵
              );
    
    通道融合
    void merge(
                  const Mat* mv,                                  //矩阵数组,包含多个待融合单通道矩阵
                  size_t count,                                   //需要融合的矩阵数目
                  OutputArray dst                                 //输出结果(融合后的多通道矩阵)
              );
    void merge(
                  InputArrayOfArrays mv,                          //vector容器,包含多个待融合单通道矩阵
                  OutputArray dst                                 //输出结果(融合后的多通道矩阵)
              );
    
    图像旋转
    M = cv2.getRotationMatrix2D((width/2, height/2), angle, scale)
    # M为旋转矩阵,第一个参数是设定旋转中心,第二个参数是旋转角度(单位是度,逆时针为正),第三个参数是缩放比例
    ratation = cv2.warpAffine(image, M, (width, height))
    
    

    图像索引

    图像是以numpy数组形式存储,就可以看成三维数组,任何numpy支持的操作,都可以操作图像。最方便的莫过于索引和切片。

    img[i,j,k]    i  表示y 坐标, j  表示x坐标, k表示通道 
    img.itemset( (10,10 ,0), 255)    设置像素值
    img.item(( 10 ,10 ,0))     获取像素值
    
    

    图像属性

    img.shape    返回包含宽度,高度和通道数的数组
    img.size   返回图像像素的大小
    img.dtype    图像的数据类型,int  or float
    

    绘图

    cv2.putText()       参数1:图像,参数2:文字内容,参数3:坐标位置,参数4:字体,参数5:字号,参数6:颜色,参数7:字体粗细
    
    cv2.rectangle()    参数1:图像,参数2:左上角坐标,参数3:右下角坐标,参数4:框的颜色,参数5:框的粗细
    
    void line(
                InputOutputArray img,          //要绘制线段的图像
                Point pt1,                     //线段的起点
                Point pt2,                     //线段的终点
                const Scalar& color,           //线段的颜色,通过一个Scalar对象定义
                int thickness = 1,             //线条的宽度
                int lineType = LINE_8,         //线段的类型,默认值为8邻接
                int shift = 0                  //坐标点小数点位数
             );
    
    void circle(
                   InputOutputArray img,       //输入输出图像
                   Point center,               //圆心坐标
                   int radius,                 //圆的半径
                   const Scalar& color,        //圆的颜色,Scalar(B, G, R)
                   int thickness = 1,          //圆的线条宽度,正数表示线条的粗细程度,负数表示圆被填充
                   int lineType = LINE_8,      //线条的类型
                   int shift = 0               //圆心坐标点和半径值的小数点位数
               );
    
    
    

    图像处理

    高斯平滑滤波 cv2.GaussianBlur()   参数1:图像,参数2:滤波器大小,参数3:标准差
    gray = cv2.GaussianBlur(gray,(3,3),0) #模糊图像
    
    中值滤波 cv2.medianBlur()     参数1:图像,参数2:滤波尺寸
    gray = cv2.medianBlur(gray,5) # 填充白色噪点
    
    均值滤波
    void blur( 
                InputArray src,                              //待均值滤波的输入图像 
                OutputArray dst,                             //滤波后的输出图像
                Size ksize,                                  //滤波器尺寸(大于1的奇数)
                Point anchor = Point(-1,-1),                 //滤波器中心位置
                int borderType = BORDER_DEFAULT              //边界模式,用于推断图像外部像素的某种边界模式
             );
    
    高斯滤波
    void GaussianBlur(
                        InputArray src,                      //待高斯滤波的输入图像
                        OutputArray dst,                     //滤波后的输出图像
                        Size ksize,                          //滤波器尺寸(大于1的奇数)
                        double sigmaX,                       //高斯核函数在X方向上的标准差
                        double sigmaY = 0,                   //高斯核函数在Y方向上的标准差
                        int borderType = BORDER_DEFAULT      //边界模式,用于推断图像外部像素的某种边界模式
                     );
    
    中值滤波
    void medianBlur(
                      InputArray src,                        //待中值滤波的输入图像,要求为1通道、3或4通道图像
                      OutputArray dst,                       //滤波后的输出图像
                      int ksize                              //滤波器尺寸(大于1的奇数)
                   );
    阈值分割函数
    double threshold(
                        InputArray src,        //输入图像
                        OutputArray dst,       //输出图像
                        double thresh,         //阈值
                        double maxval,         //使用 BINARY 或 BINARY_INV 方法时的最大值
                        int type               //选用 OpenCV 提供的阈值分割方法
                    );
    
    

    相关文章

      网友评论

          本文标题:opencv python接口用法

          本文链接:https://www.haomeiwen.com/subject/apdclctx.html