1

谁能告诉我 cvmSet 在下面的代码中实际做了什么。尤其是L0[y*5 + x]这部分。此外,该数组是声明为一维数组还是二维数组?我猜它是一维数组。我只是想了解那条特定的线。任何帮助将不胜感激。

我的意思是如果数组的值计算为L0[y*5 + x],那么L0中的元素的作用是什么,那么初始化一维L0的数组元素有什么意义呢?

    float L0[]={
        -1,-1,-1,-1,-1,
        0, 0, 0, 0, 0,
        2, 2, 2, 2, 2,
        0, 0, 0, 0, 0,
        -1,-1,-1,-1,-1 };

    CvMat*  rgbMat = cvCreateMat(5, 5, CV_32FC1);

    for (int y = 0; y < 5; y++)
    {
        for (int x = 0; x < 5; x++)
            cvmSet(rgbMat, y, x, L0[y*5 + x]);
    }
4

2 回答 2

2

L0 被声明为 25 个元素的一维数组,但它被解释为 2D 5x5,实际上很常见。L0[y*5 + x] 仅用于此目的,以获取与 2D 中的 [x,y] 对应的数组元素。

于 2013-07-03T09:57:14.297 回答
1

该行cvmSet(image,x,y,value)解释为:

用值设置图像中的像素 x,y。

该值是为数组 L0 导出的。例如对于像素 (x,y)=(1,2):

value= L0[y*5 + x] = L0[2*5+1] = L0[11] = 2.

于 2013-07-03T09:57:32.130 回答