首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-04-27 
OpenCV中显示特征脸为黑色是什么原因OpenCV中显示特征脸图片时是黑色是什么原因特征脸矩阵数据如下(部分):

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); }


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

热点排行