显示矩阵 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;
}
我正在尝试在 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;
}