我正在寻找OpenCV中matlab的min
函数的等价物,具有这种特殊功能(取自the official Matlab documentation):
[M,I] = min(___)找到A的最小值的索引,并使用前面语法中的任何输入参数在输出向量I中返回它们。如果最小值出现多次,则min返回与第一次出现相对应的索引。
在我的具体情况下,我有2张图片。我想用每个像素的最小值创建一个新图像(这两个图像),我需要存储一个地图(即一个Mat
对象或类似大小的类似物),其中地图的每个像素都告诉我是否最小值来自他的第一张或第二张图片(您可以将它们视为n * m * 2图像,我想在通道中取最小值,并希望能够告诉我从哪个通道获得此值)。
在OpenCV中有一个简单的方法吗?
顺便说一句,这是一个Android应用程序,所以Java答案比C ++更受欢迎。谢谢。
编辑:我可以想到一些循环解决方案,但我需要我的解决方案尽可能高效,所以我想看看是否有一些内置函数
编辑2 - 我没有找到一个解决方案,我得到整个矩阵的绝对最小/最大值 - 我想要它按像素,包括一个地图告诉我从哪个图像选择的值。例如:
A = [1 2 ;
3 4 ]
B = [5 6 ;
1 2 ]
-->
min(A,B) = [1 2 ;
1 2 ]
// these are the actual values ^
minInd(A,B) = [1 1 ;
2 2 ]
// these are the indices ^ where 1 means it was taken from A, and 2 means it was taken from B
编辑:我的原始答案是无用的
怎么样
MatExpr min(const Mat& a, const Mat& b)
来自this的帖子。如果你从原始图像A
和B
和C=min(A,B)
开始,那么你可以定义D=A-C
。如果D(i,j)==0
,那么价值来自A
。如果D(i,j)>0
,那么像素值来自B
。
如果A
和B
持有浮标而不是整数,那么你当然必须用一些小容差进行比较。