显示矩阵opencv的奇怪行为

时间:2015-01-13 23:24:19

标签: c++ 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]

我不明白什么是错的。我在注释行之前打印了这些值,但不知怎的,它们似乎从一开始就影响了矩阵。

1 个答案:

答案 0 :(得分:0)

您正在使用未初始化的值。没有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;
}