• OpenCV中的compare


    1. 问题引入

    一句代码带来的思考

    Mat thread_mat  = gray > threadvalue

    解释下这句代码的含义:

    1.gray是单通道灰度图像,与threadvalue进行比较相当于是二值化阈值处理过程

    2.将阈值处理结果赋值给thread_mat对象

    该函数的作用其实就是图像的二值化,阈值为threadvalue

     

    2. 原理

    实际“>”完成的工作是和compare(参数...)一样的 

    函数原型:

    1 C++: void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop)
    2 Python: cv2.compare(src1, src2, cmpop[, dst]) → dst
    3 C: void cvCmp(const CvArr* src1, const CvArr* src2, CvArr* dst, int cmpOp)
    4 Python: cv.Cmp(src1, src2, dst, cmpOp) → None
    5 C: void cvCmpS(const CvArr* src1, double src2, CvArr* dst, int cmpOp)
    6 Python: cv.CmpS(src1, src2, dst, cmpOp) → None

    参数说明:

    src1:第一个输入参数,要求是一个单通道Mat或者是一个数值

    src2:第一个输入参数,要求是一个单通道Mat或者是一个数值

    dst:输出结果图像,类型是CV_8UC1,即单通道8位图,dst和我们开头代码的threat_mat对象表述的意思相同

      dst大小说明:1.当src1和src2的size大小相同单通道图像时,dst大小即为src1与src2各个像素比较结果                                                

    dst(I)=src1(I) compop src2(I)//I 表示某个像素值

                                   2.当src1为单通道图像,src2为某一个标量的常数时,dst各个像素的取值为src1的每个像素与src2的常数比较的结果

    dst(I) = src1(I) cmpop src2 //I代表一个像素值 此时的src2为某一标量常数

                                   3.当src1为某一标量的常数,src2为单通道图像时,dst各个像素的取值为src1常数与src2各个像素值进行大小比较结果

    dst(I) = src1 cmpop src2(I) //src1是一标量常数,I即表示某个像素值

     

    cmPoP:比较方式即当使用compare函数的时候根据以下规则进行src1和src2的比较,比较结果为真dst的像素值置为255.否则0

    • CMP_EQ:src1==src2
    • CMP_GT:src1>src2
    • CMP_GE:src1>=src2
    • CMP_LT:src1<src2
    • CMP_LE:src1<=src2
    • CMP_NE:src1!=src2

             

    参考资料链接: 

    [1]https://docs.opencv.org/2.3/modules/core/doc/operations_on_arrays.html#compare

     

  • 相关阅读:
    Python Day13:开放封闭原则、函数装饰器、全局局部变量
    Python Day12
    Python Day11
    Python Day10
    drf框架
    drf框架
    drf框架
    drf框架
    vue框架
    vue框架
  • 原文地址:https://www.cnblogs.com/zhaobinyouth/p/12894793.html
Copyright © 2020-2023  润新知