OpenCV笔记:compare()函数介绍

来源:互联网 发布:清风冰桶算法 编辑:程序博客网 时间:2024/05/19 05:33

OpenCV中定义在core.hpp中的compare()函数原型如下:

void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop);


函数作用:
按照指定的操作cmpop,比较输入的src1和src2中的元素,输出结果到dst中


参数解释:
src1:原始图像1(必须是单通道)或者一个数值,比如是一个Mat或者一个单纯的数字n;
src2:原始图像2(必须是单通道)或者一个数值,比如是一个Mat或者一个单纯的数字n;
dst:结果图像,类型是CV_8UC1,即单通道8位图,大小和src1和src2中最大的那个一样,比较结果为真的地方值为         255,否则为0;
cmpop:操作类型,有以下几种类型:

enum { CMP_EQ=0,    //相等CMP_GT=1,   //大于CMP_GE=2,   //大于等于CMP_LT=3,   //小于CMP_LE=4,   //小于等于CMP_NE=5 }; //不相等


函数原理:

从参数的要求可以看出,compare函数只对以下三种情况进行比较:

1. array和array

此时输入的src1和src2必须是相同大小的单通道图,否则没办法进行比较了。计算过程就是:

dst(i) = src1(i) cmpop src2(i)

也就是对src1和src2逐像素进行比较。

 

2. array和scalar

此时array仍然要求是单通道图,大小无所谓,因为scalar只是一个单纯的数字而已。比较过程是把array中的每个元素逐个和scalar进行比较,所以此时的dst大小和array是一样 的。计算过程是:

dst(i) = src1(i) cmpop scalar

 

3. scalar和array

这个就是2的反过程了,只是比较运算符cmpop左右的参数顺序不一样了而已。计算过程如下:

dst(i) = scalar cmpop src2(i)

 

 

用途举例:

这个函数有一个很有用的地方就是:当你需要从一幅图像中找出那些特定像素值的像素时,可以用这个函数。类似与threshold()函数,但是threshold()函数是对某个区间内的像素值进行操作,compare()函数则可以只是对某一个单独的像素值进行操作。比如我们要从图像中找出像素值为50的像素点,可以下面这样做:

cv::Mat result;cv::compare(image,50, result, cv::CMP_EQ);





1 0
原创粉丝点击