铅笔

在你的害怕中坚持的越多,你就会越自信
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

OpenCV中的compare

Posted on 2020-05-15 14:34  黑色の铅笔  阅读(1346)  评论(0编辑  收藏  举报

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