如何获得非零矩阵的值

我正在使用opencv将一些matlab代码翻译成c ++。 我想获得满足条件的矩阵的值。 我为此创建了一个遮罩,当我将其应用到原始矩阵时,我获得了原始矩阵的相同大小,但有0个值不在遮罩中。 但我的问题是,我怎么才能得到矩阵中的非零值,并将其分配给不同的矩阵。

我的matlab代码是:

 for i= 1:size(no,1)
        mask= labels==i;
        op = orig(mask, :); //op only contains the values from the orig matrix which are in the mask. So orig size and op size is not the same
.....
end

我现在拥有的c ++翻译是:

for (int i=0; i<n.rows; i++)
{
    Mat mask;
    compare(labels,i,mask,CMP_EQ);
    Mat op;
    orig.copyTo(op,mask); //Here the orig size and the op size is always same but values which are not in the mask are 0
}

那么,我怎样才能创建一个只有掩码满足的值的矩阵?


你可以尝试使用cv :: SparseMat(http://docs.opencv.org/modules/core/doc/basic_structures.html#sparsemat),它只保留一个散列中的非零值。

当您将常规cv :: Mat分配给cv :: SparseMat时,它会自动捕获非零值。 从这一点开始,您可以遍历非零值并根据需要操作它们。

希望我有正确的问题,它有帮助!


OpenCv支持矩阵表达式,如A > BA <= B等等。

这在cv :: Mat的文档中有说明


如果你只是想存储值,Mat对象可能不是最好的方法,因为它是为了包含图像而制作的。

在这种情况下,使用std::vector对象而不是cv::Mat对象,并且只要找到非零的元素,就可以使用.push_back句柄,该元素将动态调整矢量大小。

如果您正在尝试创建新图像,那么您必须具体说明要查看的图像类型,因为如果您不知道有多少个非零元素,您如何设置宽度和高度? 你也可能会得到奇数个元素。

链接地址: http://www.djcxy.com/p/75553.html

上一篇: How to get values of a Matrix which are non zero

下一篇: python multiprocessing.Pool kill *specific* long running or hung process