c++ - 初始化矩阵

标签 c++ opencv matrix element

我写了下面的代码:

int _tmain(int argc, _TCHAR* argv[])
{

int vals[]={1,2,3,4,5,6,7,8,9};

CvMat mat = cvMat(3,3,CV_8UC1,vals);

for(int i=0;i<mat.rows;i++)
{
    int* ptr = (int*) (mat.data.ptr + i* mat.step);

    for(int j=0;j<mat.cols;j++)
    {
                printf("%d\t",*ptr++);

    }
    printf("\n");
}

return 0;
}

我得到的输出是:

1              2               3
512            768             1024
196608         262144          327680

矩阵未正确初始化。指针 ptr 指向每一行的开头,递增它会给出相应列中的元素。我的假设正确吗?是不是使用的cvMat构造函数或者元素的访问方式有误?

最佳答案

为什么不使用 cv::Mat 类?

它有一些方便的函数可以更好地处理内存。

对于声明和初始化 cv::Mat 在您的情况下,代码将如下所示:

int main()
{
   int vals[] = {1,2,3,4,5,6,7,8,9};

    Mat mat = cv::Mat(3, 3, CV_8UC1, vals).clone();

    for(int i = 0; i < mat.rows; i++)
    {
        for(int j = 0; j < mat.cols; j++)
        {
             cout << mat.at<uchar>(j,i) << " ";
        }
        cout << endl;
    }
    return 0;
}

关于c++ - 初始化矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11923094/

相关文章:

c++ - 使用 Opencv C++ 中对象的给定 X、Y 进行卡尔曼滤波器跟踪

具有特定值的行名和列名

c++ - 检测偶数和奇数 C++ vector 迭代器

C++ Boost Spirit,解析数据并存储最大值

android - android studio 中的 Opencv import highgui 显示错误。无法解决(我添加了库仍然存在错误)

python-3.x - 如何在不需要启动终端窗口的情况下等到在 python3 中按下热键?

matlab - 通过从每列可能不同的行中删除一个条目来删除矩阵中的一行

iphone - 是否可以使用 Accelerate/LAPACK 求解非方欠/过约束矩阵?

c++ - linux安装kde运行时库的问题

c++ - 使用 C++/WinRT 使用设备填充 ListBox,显示它们的名称?