显示矩阵 opencv 的奇怪行为

Strange behavior displaying matrix opencv

我正在尝试在 OpenCV 中实现拜耳滤色器阵列!

代码如下:

#include <cv.h>
#include <highgui.h>
#include <iostream>

using namespace cv;
using std::cout;
using std::endl;

int main( int argc, char** argv )
{
  int rows = 4, cols = 4;

  cv::Mat_<uchar> mask(rows, cols);

  cv::Mat_<uchar> pattern(1, cols);

  for (int i = 0; i < cols; i = i + 2) pattern(0, i) = 1;

  for (int j = 0; j < rows; j = j + 2) pattern.row(0).copyTo(mask.row(j));

  cout << mask << endl;

  namedWindow( "Result" );
  imshow( "Result", mask );

  waitKey(0);

  return 0;
}

问题是当我对第23行到第26行进行注释时,第21行语句的输出符合我的预期。

[1, 0, 1, 0;
  0, 0, 0, 0;
  1, 0, 1, 0;
  0, 0, 0, 0]

但是当取消注释这些行时,输出会变成这样:

[1, 100, 1, 48;
  47, 117, 115, 98;
  1, 100, 1, 48;
  49, 47, 50, 45]

我不明白哪里出了问题。我在注释行之前打印值,但不知何故,它们似乎从一开始就影响了矩阵。

您正在使用未初始化的值。没有 namedWindow 和 imshow 的东西你只是幸运。

尝试:

using namespace cv;
using std::cout;
using std::endl;

int main( int argc, char** argv )
{
  int rows = 4, cols = 4;

  cv::Mat_<uchar> mask(rows, cols);

  cv::Mat_<uchar> pattern(1, cols);

  // ------------------------------------------
  // initialize your matrices:
  for(int j=0; j<rows; ++j)
      for(int i=0; i<cols; ++i)
      {
          mask(j,i) = 0;
      }
  for(int i=0; i<cols; ++i) pattern(0,i) = 0;
  // ------------------------------------------


  for (int i = 0; i < cols; i = i + 2) pattern(0, i) = 1;

  for (int j = 0; j < rows; j = j + 2) pattern.row(0).copyTo(mask.row(j));

  cout << mask << endl;

  namedWindow( "Result" );
  imshow( "Result", mask );

  waitKey(0);

  return 0;
}