OpenCV

时间:2017-12-24 13:49:30

标签: matlab opencv min opencv4android

我正在寻找OpenCV中Matlab的min函数的等价物,具有此特定功能(取自the official Matlab documentation):

  

[M,I] = min(___)找到索引   A的最小值和返回值   它们在输出向量I中,使用任何一个   前面的输入参数   语法。如果出现最小值   不止一次,然后min返回   索引对应第一个   发生。

在我的具体情况下,我有2张图片。我想用每个像素的最小值(这两个图像)创建一个新图像,我需要存储一个地图(即Mat对象或类似大小的类似物),其中每个像素都是map告诉我最小值是从第一个图像还是第二个图像中获取的 (您可以将它们视为n * m * 2图像,我想在通道中采用最小值,并且希望能够告诉我从哪个通道获得此值。)

在OpenCV中有一种简单的方法吗?

不过,它适用于Android应用程序,所以Java答案比C ++更受欢迎。感谢。

编辑:我可以想到一些循环解决方案,但我需要我的解决方案尽可能高效,所以我想看看是否有一些内置函数

EDIT2 - 我没有找到一个解决方案,我得到了整个矩阵的绝对最小值/最大值 - 我希望它按像素方式,包括地图它告诉我从哪个图像中选择了值。例如:

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

1 个答案:

答案 0 :(得分:1)

编辑:我的原始答案毫无用处

怎么样

MatExpr min(const Mat& a, const Mat& b)

来自this帖子。如果您从原始图片AB以及C=min(A,B)开始,那么您可以定义D=A-C。如果D(i,j)==0,则该值来自A。如果D(i,j)>0,则像素值来自B

如果AB保持浮动而不是整数,那么你当然必须用一些小容差进行比较。