vs2010+opencv调试
2014-05-08 22:39
495 查看
导师布置的pca的算法,要求用c++完成,现在已经到了求特征值特征向量的部分。这部分导师推荐调用opencv代码。
于是,配置了vs2010+opencv,一波三折,今天总算已经很接近成功了。
先后遇见了这几个问题:
http://www.cnblogs.com/GWeuro/archive/2012/12/21/2828035.html http://bbs.csdn.net/topics/340207150 http://bbs.csdn.net/topics/320005477
然后我要重新装了,但愿不会死得惨。
先把源码PO出来
注释掉的部分是pca,active的部分是opencv的测试程序,目的为输出一张图片。
等待拷vs安装包的时间,我又试了把opencv改成x86版,把平台也换成x86,会提示找不到.dll。win32也是这个情况。换成x64就提示不匹配。
看来应该是我必须用64位的,可我电脑只是64位处理器,系统还是32位啊,非常不解。
安装包拷好了,重装一遍选64位编译器试一下,不行就实在没招了。
于是,配置了vs2010+opencv,一波三折,今天总算已经很接近成功了。
先后遇见了这几个问题:
http://www.cnblogs.com/GWeuro/archive/2012/12/21/2828035.html http://bbs.csdn.net/topics/340207150 http://bbs.csdn.net/topics/320005477
然后我要重新装了,但愿不会死得惨。
先把源码PO出来
注释掉的部分是pca,active的部分是opencv的测试程序,目的为输出一张图片。
等待拷vs安装包的时间,我又试了把opencv改成x86版,把平台也换成x86,会提示找不到.dll。win32也是这个情况。换成x64就提示不匹配。
看来应该是我必须用64位的,可我电脑只是64位处理器,系统还是32位啊,非常不解。
安装包拷好了,重装一遍选64位编译器试一下,不行就实在没招了。
// pca.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> #include"stdlib.h" #include<fstream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> using namespace std; using namespace cv; int main(int argc, char** argv) { //read an image if ( argc != 2 ) { cout << "Usage: display_image ImageToLoadAndDisplay" << endl; return -1; } Mat image; cout << "size: " << image.size().height << " , " << image.size().width << endl; // Read the file image = imread(argv[1], CV_LOAD_IMAGE_COLOR); // Check for invalid input if (!image.data) { cout << "Could not open or find the image" << endl; return -1; } // Show our image inside it. imshow("Display window", image); //Wait for a keystroke in the window waitKey(0); /* //每张图的特征,样本大小dim,假设50*50 int i,j,k,dim=2500; //图的个数,假设200张图 int number = 200; double **data; double *sumdata; double *averdata; double **diffdata; double **covdata; double **difftdata; ofstream fout("data.txt"); ofstream fout2("averdata.txt"); ofstream fout3("diffdata.txt"); ofstream fout4("difftdata.txt"); ofstream fout5("covdata.txt"); //随机生成图像矩阵,每一行为一张图的数据 //200*2500 data=new double*[number]; for(i=0;i<number;i++) //溢出的原因,原来是dim data[i]=new double[dim]; if(!fout){ cout<<"open error!"<<endl; exit(1); } for(i=0;i<number;i++){ for(j=0;j<dim;j++){ data[i][j]=rand()/100; fout<<data[i][j]<<" "; } fout<<endl; } fout.close(); fout.clear(); cout<<"----random done----"<<endl; //每行相加,再除以图数,求平均值;计算训练图片的平均脸 //1*2500 sumdata=new double[dim]; averdata=new double[dim]; if(!fout2){ cout<<"open error!"<<endl; exit(1); } for(j=0;j<dim;j++) //初始化 sumdata[j]=0; //初始化 for(j=0;j<dim;j++) for(i=0;i<number;i++) sumdata[j]+=data[i][j]; for(i=0;i<dim;i++){ averdata[i]=sumdata[i]/number; fout2<<averdata[i]<<" "; } fout2.close(); fout2.clear(); delete sumdata; cout<<"----aver done----"<<endl; //差值脸,200*2500 diffdata=new double*[number]; for(i=0;i<number;i++){ //溢出的原因,原来是dim diffdata[i]=new double[dim]; } if(!fout3){ cout<<"open error!"<<endl; exit(1); } for(i=0;i<number;i++){ for(j=0;j<dim;j++){ diffdata[i][j]=data[i][j]-averdata[j]; fout3<<diffdata[i][j]<<" "; //[i][j] } fout3<<endl; } fout3.close(); fout3.clear(); cout<<"----diff done----"<<endl; //求转置矩阵 difftdata 2500*200 difftdata = new double*[dim]; for(i=0;i<dim;i++) { difftdata[i]=new double[number]; } for(i=0;i<number;i++) for(j=0;j<dim;j++){ difftdata[j][i]=diffdata[i][j]; } for(i=0;i<dim;i++){ for(j=0;j<number;j++){ fout4<<difftdata[i][j]<<" "; } fout4<<endl; } fout4.close(); fout4.clear(); cout<<"----difft done----"<<endl; //构建协方差矩阵 diff*difft //200*2500 * 2500*200 = 200*200 covdata=new double*[number]; for(i=0;i<number;i++){ covdata[i]=new double[number]; } //乘法计算结果与matlab计算出的有均值为 6.0883e-004 的误差,且主对角线差别很大 for(i=0;i<number;i++) for(j=0;j<number;j++) { covdata[i][j]=0; for(k=0;k<dim;k++) covdata[i][j]+=diffdata[i][k]*difftdata[k][j]; } for(i=0;i<number;i++){ for(j=0;j<number;j++){ fout5<<covdata[i][j]<<" "; } fout5<<endl; } fout5.close(); fout5.clear(); cout<<"----cov done----"<<endl; //调用opencv求特征值和特征向量,并排序 delete [] data; delete [] averdata; delete [] diffdata; delete [] difftdata; delete [] covdata; */ return 0; }
相关文章推荐
- python中使用OpenCV进行人脸检测的例子
- opencv 做人脸识别 opencv 人脸匹配分析
- 使用opencv拉伸图像扩大分辨率示例
- OpenCV 2.4.3 C++ 平滑处理分析
- OpenCV学习笔记(二十五)——OpenCV图形界面设计Qt+VS2008
- 分享一些OpenCV实现立体视觉的经验
- 关于OpenCv图像变换与基本图形检测
- "应用程序正常初始化失败"-0xc0150002 解决办法
- OpenCV->HSV色彩空间
- opencv 内存泄露
- OpenCV 2.3.1图像文件的读入和显示
- opencv2 矩阵方式 resize图像缩放代码
- OpenCV 灰度直方图
- 彩色图转为灰度图
- Qt + opencv +mac
- 【OpenCV】使用floodfill()实现PhotoShop魔棒功能
- OpenCV的图像处理
- OpenCV中Canny边缘检测源程序的注释
- opencv累加一个三通道矩阵的所有元素(结果绝对正确)
- opencv加载并显示图像程序