我试图在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]
我不明白什么是错的。我在注释行之前打印了这些值,但不知怎的,它们似乎从一开始就影响了矩阵。
答案 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;
}