的矩阵我有3个图像,其余转换为维度的矩阵4800×1.我必须建立一个超级矩阵是尺寸4800×3的矩阵由将这些较小的矩阵彼此堆叠在一起。即第一张图像是超级矩阵中的第一列,第二张图像是超级矩阵中的第二列,第三张图像是超级矩阵中的第三列。我的代码的输出显示了正确维度的超级矩阵。然而,我认为输出是错误的,因为矩阵中的3个图像中的2个主要是黑色和白色,因此将具有很多像素值为0.在输出中,我看到大的像素值,它们完全不对应于加载的图像。下面是代码,我已经上传了我在代码中使用的3张图片,这样你们都可以看到我的意思。如果有人能帮我解决这个问题,我会很感激。制作尺寸4800×3组成3点矩阵4800 X 1
#include "cv.h"
#include "highgui.h"
#include "iostream"
using namespace std;
void cvDoubleMatPrint (const CvMat* mat)
{
int i, j;
for (i = 0; i < mat->rows; i++)
{
for (j = 0 ; j < mat->cols; j++)
{
printf ("%f ", cvGet2D (mat, i , j));
}
printf ("\n");
}
}
int main(int argc, char* argv)
{
CvMat *img0, *img1, *img2, *img0_mat, *img1_mat, *img2_mat, *col0, *col1, *col2, *superMat = NULL;
img0 = cvLoadImageM("C:\\small\\walk mii.jpg", CV_LOAD_IMAGE_UNCHANGED);
img1 = cvLoadImageM("C:\\small\\wave mii.jpg", CV_LOAD_IMAGE_UNCHANGED);
img2 = cvLoadImageM("C:\\small\\fantasy.jpg", CV_LOAD_IMAGE_UNCHANGED);
CvMat img0_header ,img1_header, img2_header;
col0 = cvReshape(img0, &img0_header, 0, 4800);
col1 = cvReshape(img1, &img1_header, 0, 4800);
col2 = cvReshape(img2, &img2_header, 0, 4800);
superMat = cvCreateMat(4800, 3, CV_8UC1);
cvSetZero(superMat);
for(int i=0; i<col0->height; i++)
{
CV_MAT_ELEM(*superMat, double, i, 0) = CV_MAT_ELEM(*col0, double, i, 0);
}
for(int j=0; j<col1->height; j++)
{
CV_MAT_ELEM(*superMat, double, j, 1) = CV_MAT_ELEM(*col1, double, j, 0);
}
for(int k=0; k<col2->height; k++)
{
CV_MAT_ELEM(*superMat, double, k, 2) = CV_MAT_ELEM(*col2, double, k, 0);
}
cvDoubleMatPrint(superMat);
cvWaitKey(0);
return 0;
}
多少个频道在图片有哪些?我猜他们是RGB,即每个都有3个通道。 – Robinson 2012-03-13 21:35:44
@Robinson是所有3 RGB即使2似乎是灰度 – 2012-03-13 22:30:40