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