读书人

OpenCV中显示特征脸为黑色是什么原因解

发布时间: 2012-04-27 11:57:44 作者: rapoo

OpenCV中显示特征脸为黑色是什么原因
OpenCV中显示特征脸图片时是黑色是什么原因
特征脸矩阵数据如下(部分):
0.000672752 -0.00398728 -4.23263e-005 -0.0150063 -0.0100655 -0.00682615 -0.0136038 -0.00788624 -0.0116071 -0.0170394 -0.0113726 -0.00329139 -0.00835479 -0.00103875 -0.0142026 -0.0157444 -0.00300682 -0.00911777 -0.00928913 -0.0149414 -0.00239133 -0.00676903 0.00255839 -0.0260086 -0.0176653 -0.00379464 -0.0136513 -0.000317007 0.00736613 -0.0228252 -0.0057197 0.000358763 0.00238805 0.00498493 -0.027213 -0.00735805 0.00357394 0.00700721 -0.00336265 0.00625503 -0.0144903 -0.000144143 0.00967291 0.00113688 0.00268168 -0.0240363 0.00871699 0.000356486 -0.00095915 -0.000674725 0.0107582 -0.00599353 0.00250839 -0.00294682 -0.00241268 0.00397216 0.0161414 0.00467632 -0.00419795 -0.00875254 0.000507923 0.00745908 0.00289604 -0.00840111 0.0064205 0.0132191 0.00565852 0.0171387 0.00387539 0.00292129 0.00613545 -0.00697766 0.00481558 0.000702915 0.00950864 0.00292367 0.0133789 0.00308503 0.0134737 0.00894141 0.00250446 0.00646444 0.00190217 0.00691703 0.00347312 0.00927087 0.00509597 0.00993473 0.00664872 0.0139689 0.00986597 0.0112875 0.00626067 0.00739277 0.0123023 0.0026249 0.0155314 0.0201914 0.0097147 0.00645924 0.00216852 0.00438826 0.0105113
......

程序如下:

C/C++ code
#include <stdio.h>#include <cv.h>#include <highgui.h>#include <iostream>using namespace std;void main(){    float Vector[10][92*112];    char fileName[40];    int img_num;    int start;    for(img_num=0;img_num<10;img_num++) //对每一张图片进行操作    {        sprintf(fileName, "trainData\\%d.pgm", img_num+1);        IplImage *img_src = cvLoadImage(fileName, CV_LOAD_IMAGE_GRAYSCALE);        IplImage *img_gray = cvCreateImage(cvSize(92,112), 8, 1);        cvResize(img_src, img_gray);        CvMat *Mat_tmp = cvCreateMat(img_gray->height, img_gray->width, CV_32FC1);        cvConvert(img_gray, Mat_tmp); //得到转换成100*100维图片后转换成矩阵;        //将矩阵数据转换成一行向量,有10副图,Vector[*][100*100] *处为10;        start = 0;        for(int i=0;i<Mat_tmp->cols;i++)        {            for(int j=0;j<Mat_tmp->rows;j++)            {                float value = cvmGet(Mat_tmp, j, i);                Vector[img_num][start] = value;                start++;            }        }        //内存释放;        cvReleaseImage(&img_src);        cvReleaseImage(&img_gray);        cvReleaseMat(&Mat_tmp);    }    //初始化CalcPCA参数    CvMat data;    cvInitMatHeader( &data, 10, 92*112, CV_32FC1, Vector);    CvMat *pAvgVector = cvCreateMat( 1, 92*112, CV_32FC1);     CvMat *pEigenValue = cvCreateMat( 1, 10, CV_32FC1);     CvMat *pEigenVector = cvCreateMat( 10, 92*112, CV_32FC1);    cvCalcPCA(&data, pAvgVector, pEigenValue, pEigenVector, CV_PCA_DATA_AS_ROW);     //输出特征值;    cout<<"特征值为:"<<endl;    for(int i=0; i<10; i++)    {        printf("%f\n", cvmGet(pEigenValue, 0, i));    }    //求出特征脸;    CvMat *mat = cvCreateMat(92, 112, CV_32FC1);    start = 0;    for(i=0; i<112; i++)    {        for(int j=0; j<92; j++)        {            cvmSet(mat, j, i, cvmGet(pEigenVector, 0, start));            start++;        }    }    //标准化特征脸里面的数据;    cvNormalize(mat, mat, 255);    //显示特征脸    cvNamedWindow("FeatureFace",1);    cvShowImage("FeatureFace", mat);    cvWaitKey(0);    //释放内存空间;    cvReleaseMat(&mat);    cvReleaseMat(&pAvgVector);    cvReleaseMat(&pEigenValue);    cvReleaseMat(&pEigenVector); }


[解决办法]
请问楼主,你是怎么解决的?我的也是显示黑色

读书人网 >C++

热点推荐