为什么OpenCV Mat对象在嵌套for循环中指定了预期值后却不包含这些值



我很难理解OpenCV中的Mat类型是如何工作的,以及它在以下情况下的行为方式。不幸的是,我为这个例子考虑的文档在这里对我没有太大帮助。。。

这是我的程序:

Mat matrix (5, 5, CV_16S);
matrix.setTo(0);
printf("matrix %d, %d: n", matrix.cols, matrix.rows);
for( size_t i = 0; i < matrix.cols; i++ ) {
    for( size_t j = 0; j < matrix.rows; j++ ) {
        matrix.at<int>(i,j) = 200;
        printf( " %d ", matrix.at<int>(i,j));
    }
    printf("n");
}
cout << "matrix: " << matrix << endl;

嵌套的for-循环中生成的第一个输出给出了我所期望的结果,即:

矩阵5,5:200 200 200 200200 200 200 200200 200 200 200200 200 200 200200 200 200 200

这是因为我创建了一个具有5行和5列的Mat对象,并在循环遍历它们时为每个条目分配了值200。

然而,最后一行,我使用cout打印Mat,给出了以下输出:

matrix: [200, 0, 200, 0, 200;
  200, 0, 200, 0, 200;
  200, 0, 200, 0, 200;
  200, 0, 200, 0, 200;
  200, 0, 200, 0, 200]

这里,与我预期的不同,只有第二个条目被分配给值200。有人能向我解释一下这背后的逻辑吗?在我为矩阵中的每个值分配200之前,我缺少了什么,是什么导致了0条目?

,你做错了两件事

1) 如果你的垫子是CV_16S,你必须以m.at<short>(r,c);的身份访问它(换句话说,at<type>()必须与Mat的类型完全匹配。)

2) 这是opencv中的行/列世界,所以如果我遍历行上的列和j,那必须是:m.at<short>(j,i);

相关内容

  • 没有找到相关文章

最新更新