cvMerge
- void cvMerge(
- const CvArr* src0,
- const CvArr* src1,
- const CvArr* src2,
- const CvArr* src3,
- CvArr* dst
- );
【67】
cvMerge()是cvSplit()的逆运算。数组src0,src1,src2,和src3将被合并到数组dst中。当然,dst应该与源数组具有相同的数据类型和尺寸,但它可以有两个,三个或四个道道。未使用的源图像参数可设置为NULL。
cvMin和cvMinS
- void cvMin(
- const CvArr* src1,
- const CvArr* src2,
- CvArr* dst
- );
- void cvMinS(
- const CvArr* src,
- double value,
- CvArr* dst
- );
cvMin()计算数组src1和src2中相对应的每一对像素中的最小值。而cvMaxS(),将数组src与常量标量value进行比较。同样的,如果mask非空的话,那么只有与mask的非0参数相对应的dst中的元素进行计算。
cvMinMaxLoc
- void cvMinMaxLoc(
- const CvArr* arr,
- double* min_val,
- double* max_val,
- CvPoint* min_loc = NULL,
- CvPoint* max_loc = NULL,
- const CvArr* mask = NULL
- );
该例程找出数组arr中的最大值和最小值,并且(有选择性地)返回它们的地址。计算出的最大值和最小值赋值给max_val和min_val。或者,如果极值的位置参数非空,那极值的位置便会写入min_loc和max_loc。
通常,如果参数mask非空,那么只有图像arr中与参数mask中的非零的像素相对应的部分才被考虑。cvMinMaxLoc()例程仅仅处理单通道数组,如果有一个多通道的数组,则应该使用cvSetCOI()来对某个特定通道进行设置。
cvMul
- void cvMul(
- const CvArr* src1,
- const CvArr* src2,
- CvArr* dst,
- double scale=1
- );
【68】
cvMul()是一个简单的乘法函数。它将src1中的元素与src2中相对应的元素相乘,然后把结果赋给dst。如果mask是空,那么与其中0元素相对应的dst元素都不会因此操作而改变。OpenCV中没有函数cvMulS(),因为该功能已经由函数cvScale()或cvCvtScale()提供。
除此之外,有一件事情要记住:cvMul()执行的是元素之间的乘法。有时候,在进行矩阵相乘时,可能会错误使用cvMul(),但这无法奏效;记住,cvGEMM()才是处理矩阵乘法的函数,而不是cvMul()。
cvNot
- void cvNot(
- const CvArr* src,
- CvArr* dst
- );
函数cvNot()会将src中的每一个元素的每一位取反,然后把结果赋给dst。因此,一个值为0x00的8位图像将被映射到0xff,而值为0x83的图像将被映射到0x7c。
cvNorm
- double cvNorm(
- const CvArr* arr1,
- const CvArr* arr2 = NULL,
- int norm_type = CV_L2,
- const CvArr* mask = NULL
- );
这一函数可于计算一个数组的各种范数,当为该函数提供了两个数组作为参数时,可选用各种不同的公式来计算相对的距离。在前一种情况下,计算的范数如表3-9所示。
表3-9:当arr2 =NULL时,对于不同的norm_type由cvNorm()计算范数的公式
norm_type |
结果 |
CV_C |
|
CV_L1 |
|
CV_L2 |
如果第二个数组参数arr2非空,那么范数的计算将使用不同的公式,就像两个数组之间的距离。 前三种情况的计算公式如表3-10所示,这些范数是绝对范数;在后三个情况下,将会根据第二个数组arr2的幅度进行重新调整。【69~70】
表3-10:arr2非空,且norm_type不同值时函数cvNorm()计算范数的计算公式
norm_type |
结果 |
CV_C |
|
CV_L1 |
|
CV_L2 |
|
CV_RELATIVE_C |
|
CV_ RELATIVE_L1 |
|
CV_ RELATIVE_L2 |
在所有情况下,arr1和arr2必须具有相同的大小和通道数。当通道数大于1时,将会对所有通道一起计算范数(即是说,在表3-9和表3-10中,不仅是针对x和y,也针对通道数求和)。
cvNormalize
- cvNormalize(
- const CvArr* src,
- CvArr* dst,
- double a = 1.0,
- double b = 0.0,
- int norm_type = CV_L2,
- const CvArr* mask = NULL
- );
与许多OpenCV函数一样,cvNormalize()的功能比表面看更多。根据norm_type的不同值,图像src将被规范化,或者以其他方式映射到dst的一个特定的范围内。表3-11列举了norm_type可能出现的值。
表3-11:函数cvNormalize()的参数norm_type可能的值
续表