c++-基于opencv的人脸识别,代码运行出错,求帮忙!

问题描述

基于opencv的人脸识别,代码运行出错,求帮忙!

代码显示是没有错的,运行显示有未处理的异常,求大神!急!!!

解决方案

求大神帮忙!如果熟悉C++语言的,再详谈啊!我在手机上不方便传代码!

解决方案二:

#include
#include
#include
using namespace std;
void PrintMat(CvMat*);
void FputMat(FILE , CvMat *);
int main(int argc, char * argv[])
{
/
读入图像*/
CvSize image_size;
int n_board = 9;//图像数目
int sn_board = 0;//成功找到角点的图像数目
int board_w = 6;
int board_h = 9;
int board_n = board_h*board_w;//每幅图像的角点数
CvSize patter_size = cvSize(board_w, board_h);//每幅图像的角点数
CvPoint2D32f * corners = new CvPoint2D32f[board_n];//一幅图像的角点数组
CvMat * object_points = cvCreateMat(board_n*n_board, 3, CV_32FC1);
CvMat * image_points = cvCreateMat(board_n*n_board, 2, CV_32FC1);
CvMat * point_counts = cvCreateMat(n_board, 1, CV_32SC1);
for (int i = 1; i <= n_board; i++)
{
/*读入图像*/
char path[100] = "F:PPDownloadmabianQQ.mp4";
char num[10];
sprintf(num, "%d", i);
strcat(num, ".jpg");
IplImage SourceImg = cvLoadImage(strcat(path, num), CV_LOAD_IMAGE_COLOR);
image_size = cvGetSize(SourceImg);//图像的大小
IplImage *SourceImgGray = cvCreateImage(image_size, IPL_DEPTH_8U, 1);
cvCvtColor(SourceImg, SourceImgGray, CV_BGR2GRAY);
cvNamedWindow("MyCalib", CV_WINDOW_AUTOSIZE);
cvShowImage("MyCalib", SourceImg);
cvWaitKey(NULL);
/
提取角点精确到亚像素*/
int corner_count;
if (0 == cvFindChessboardCorners(SourceImgGray, patter_size, corners, &corner_count, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS))
{
cout << "......无法找出第" << i << "幅图的角点" << endl;
cvWaitKey(NULL);
cvReleaseImage(&SourceImgGray);
cvReleaseImage(&SourceImg);
continue;
//return -1;
}
else
{
cvFindCornerSubPix(SourceImgGray, corners, corner_count, cvSize(11, 11), cvSize(-1, -1), cvTermCriteria(
CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));//CvSize win 和matlab标定工具箱类似
cvDrawChessboardCorners(SourceImg, patter_size, corners, corner_count, 1);
cvShowImage("MyCalib", SourceImg);
//cvSaveImage("F:vs2008testmycalib_011.jpg",SourceImg);
}
cvWaitKey(0);
for (int j = 0; j<board_n; j++)
{
CV_MAT_ELEM(*image_points, float, sn_board*board_n + j, 0) = corners[j].x;
CV_MAT_ELEM(*image_points, float, sn_board*board_n + j, 1) = corners[j].y;
CV_MAT_ELEM(*object_points, float, sn_board*board_n + j, 0) = float(j / board_w);
CV_MAT_ELEM(*object_points, float, sn_board*board_n + j, 1) = float(j%board_w);
CV_MAT_ELEM(*object_points, float, sn_board*board_n + j, 2) = 0.0f;
CV_MAT_ELEM(*point_counts, int, sn_board, 0) = board_n;
}
sn_board++;
cvReleaseImage(&SourceImgGray);
cvReleaseImage(&SourceImg);
cout << "......成功找出第" << i << "幅图的角点" << endl;
}
cout << "......一共成功获得" << sn_board << "幅图像的角点" << "......无法获得" << n_board - sn_board << "幅图像的角点" << endl;
//重新赋值
CvMat * object_points0 = cvCreateMat(board_n*sn_board, 3, CV_32FC1);
CvMat * image_points0 = cvCreateMat(board_n*sn_board, 2, CV_32FC1);
CvMat * point_counts0 = cvCreateMat(sn_board, 1, CV_32SC1);
for (int i = 0; i<sn_board*board_n; i++)
{
CV_MAT_ELEM(*image_points0, float, i, 0) = CV_MAT_ELEM(*image_points, float, i, 0);
CV_MAT_ELEM(*image_points0, float, i, 1) = CV_MAT_ELEM(*image_points, float, i, 1);
CV_MAT_ELEM(*object_points0, float, i, 0) = CV_MAT_ELEM(*object_points, float, i, 0);
CV_MAT_ELEM(*object_points0, float, i, 1) = CV_MAT_ELEM(*object_points, float, i, 1);
CV_MAT_ELEM(*object_points0, float, i, 2) = 0.0f;
}
for (int i = 0; i<sn_board; i++)
{
CV_MAT_ELEM(*point_counts0, int, i, 0) = CV_MAT_ELEM(*point_counts, int, i, 0);
}
cvReleaseMat(&object_points);
cvReleaseMat(&point_counts);
cvReleaseMat(&image_points);
/*摄像机标定并求得内部参数*/
CvMat * camera_matrix = cvCreateMat(3, 3, CV_32FC1);
CvMat * distortion_coeffs = cvCreateMat(1, 4, CV_32FC1);
CvMat * rotation_vectors = cvCreateMat(sn_board, 3, CV_32FC1);
CvMat * translation_vectors = cvCreateMat(sn_board, 3, CV_32FC1);
int flags = 0;

cvCalibrateCamera2(object_points0, image_points0, point_counts0, image_size, camera_matrix
    //,distortion_coeffs,NULL,NULL,flags);
    , distortion_coeffs, rotation_vectors, translation_vectors, 0);
//输出结果
printf("/*****摄像机内部参数*****/n");
PrintMat(camera_matrix);
printf("/*****畸变参数k1,k2,p1,p2*****/n");
PrintMat(distortion_coeffs);
cvWaitKey(NULL);
//保存数据
cout << "......保存内部参数与畸变参数" << endl;
cvSave("camera_matrix1111.xml", camera_matrix);
cvSave("distortion_coeffs.xml", distortion_coeffs);
FILE *fp = NULL;
if ((fp = fopen("F:\PPDownload\mabian\QQ.mp4\camera_matrix.txt", "w")) == NULL)
{
    printf("无法打开文件!");
    exit(1);
}
FputMat(fp, camera_matrix);
fclose(fp);
if ((fp = fopen("F:\PPDownload\mabian\QQ.mp4\distortion_coeffs.txt", "w")) == NULL)
{
    printf("无法打开文件!");
    exit(1);
}
FputMat(fp, distortion_coeffs);
fclose(fp);
//误差分析
CvMat * object_points2 = cvCreateMat(board_n, 3, CV_32FC1);
CvMat * image_points2 = cvCreateMat(board_n, 2, CV_32FC1);
CvMat * rotation_vectors2 = cvCreateMat(1, 3, CV_32FC1);
CvMat * translation_vectors2 = cvCreateMat(1, 3, CV_32FC1);
CvMat * Err = cvCreateMat(sn_board*board_n, 2, CV_32FC1);
for (int k = 0; k<sn_board; k++)
{
    for (int i = 0; i<board_n; i++)//取一幅图的数据
    {
        CV_MAT_ELEM(*object_points2, float, i, 0) = CV_MAT_ELEM(*object_points0, float, k*board_n + i, 0);
        CV_MAT_ELEM(*object_points2, float, i, 1) = CV_MAT_ELEM(*object_points0, float, k*board_n + i, 1);
        CV_MAT_ELEM(*object_points2, float, i, 2) = 0.0f;
    }
    for (int i = 0; i<3; i++)
    {
        CV_MAT_ELEM(*rotation_vectors2, float, 0, i) = CV_MAT_ELEM(*rotation_vectors, float, k, i);
        CV_MAT_ELEM(*translation_vectors2, float, 0, i) = CV_MAT_ELEM(*translation_vectors, float, k, i);
    }
    cvProjectPoints2(object_points2, rotation_vectors2, translation_vectors2, camera_matrix,
        distortion_coeffs, image_points2);
    for (int i = 0; i<board_n; i++)
    {
        CV_MAT_ELEM(*Err, float, k*board_n + i, 0) = CV_MAT_ELEM(*image_points0, float, k*board_n + i, 0) - CV_MAT_ELEM(*image_points2, float, i, 0);
        CV_MAT_ELEM(*Err, float, k*board_n + i, 1) = CV_MAT_ELEM(*image_points0, float, k*board_n + i, 1) - CV_MAT_ELEM(*image_points2, float, i, 1);
    }
}
//PrintMat(Err);
CvMat * Err_abs = cvCreateMat(board_n*sn_board, 2, CV_32FC1);
cvAbs(Err, Err_abs);
CvScalar Dmean;
CvScalar Ddev;
cvAvgSdv(Err_abs, &Dmean, &Ddev);
printf("/*****反投影误差分析*****/n");
cout << "......绝对值误差矩阵的平均值:" << endl;
cout << Dmean.val[0] << endl;
cout << "......绝对值误差矩阵的标准差:" << endl;
cout << Ddev.val[0] << endl;
cout << "......保存误差矩阵" << endl;
cvSave("err.xml", Err);
if ((fp = fopen("F:\PPDownload\mabian\QQ.mp4\mycalib_0\err.txt", "w")) == NULL)
{
    printf("无法打开文件!");
    exit(1);
}
FputMat(fp, Err);
fclose(fp);

cvReleaseMat(&object_points2);
cvReleaseMat(&image_points2);
cvReleaseMat(&rotation_vectors2);
cvReleaseMat(&translation_vectors2);
cvReleaseMat(&Err);
cvReleaseMat(&Err_abs);
//释放总变量
cvWaitKey(NULL);
cvReleaseMat(&object_points0);
cvReleaseMat(&point_counts0);
cvReleaseMat(&image_points0);
cvReleaseMat(&camera_matrix);
cvReleaseMat(&distortion_coeffs);
cvReleaseMat(&rotation_vectors);
cvReleaseMat(&translation_vectors);
delete[] corners;
cvDestroyWindow("MyCalib");

}
void PrintMat(CvMat* arry)
{
for (int i = 0; irows; i++)
{
for (int j = 0; jcols; j++)
{
printf("%f", CV_MAT_ELEM(*arry, float, i, j));
if (jcols - 1)
printf(",");
}
printf("n");
}
}
void FputMat(FILE * fp, CvMat * arry)
{
for (int i = 0; irows; i++)
{
for (int j = 0; jcols; j++)
{
fprintf(fp, "%f", CV_MAT_ELEM(*arry, float, i, j));
if (jcols - 1)
fprintf(fp, ",");
}
fprintf(fp, "n");
}

这是代码~求大神帮忙改正!急,在线等!

解决方案三:

你这代码在哪复制来的...错误太多,“有未处理的异常”就是说代码有问题呀,根本编译不过的

解决方案四:

没学过C++语言,我们小学期临时做的项目,这段代码是从网上找的,求给新代码!我可以把剩下的悬赏金都给你

解决方案五:

“有未处理的异常”就是说代码有问题,找到指出处理即可

解决方案六:

“有未处理的异常”就是说代码有问题,找到指出处理即可

时间: 2024-08-04 00:12:18

c++-基于opencv的人脸识别,代码运行出错,求帮忙!的相关文章

基于 OpenCV 的人脸识别

##一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从谷歌街景的图片拼接,到交互艺术展览的技术实现中,都有 OpenCV 的身影. OpenCV 起始于 1999 年 Intel 的一个内部研究项目.从那时起,它的开发就一直很活跃.进化到现在,它已支持如 OpenCL 和 OpenGL 等现代技术,也支持如 iOS 和 Android 等平台. 1

maven运行出错,求大神帮忙解决

问题描述 maven运行出错,求大神帮忙解决 java.lang.ArrayIndexOutOfBoundsException: 24444 at org.objectweb.asm.ClassReader.(Unknown Source) at org.objectweb.asm.ClassReader.(Unknown Source) at org.objectweb.asm.ClassReader.(Unknown Source) at org.eclipse.jetty.annotati

用vs2015和opencv做人脸识别时碰到LNK2019的错误

问题描述 用vs2015和opencv做人脸识别时碰到LNK2019的错误 错误如下: 不是链接器的问题,应该是代码的问题,但我对c++和vs还不太熟悉.请哪位大神告知.代码如下: #include "stdafx.h" #include #include #include "opencv2/core.hpp" #include "opencv2/face.hpp" #include "opencv2/highgui.hpp"

求助:请问基于lda的人脸识别用matlab怎么做呢??希望有人可以教教

问题描述 求助:请问基于lda的人脸识别用matlab怎么做呢??希望有人可以教教 请问基于lda的人脸识别用matlab怎么做呢??希望有人可以教教 解决方案 http://www.cnki.com.cn/Article/CJFDTotal-JZDF201204042.htm 基于PCA和LDA的人脸识别系统设计 文献 希望可以帮助到你 解决方案二: http://wenku.baidu.com/view/6af06f1a10a6f524ccbf8519.html 这是百度文库中的一篇关于MA

脸部识别-关于opencv的人脸识别识别率极低

问题描述 关于opencv的人脸识别识别率极低 我用opencv做了一个人脸识别的应用.主要流程就是,从一幅图中检测出人脸,然后将人脸框定为一张新的图片,再利用这张图片,调用opencv的识别函数进行识别.可问题是,内置的三个算法我都用过了,为什么识别率都非常低呢?甚至基本是无法识别的. 我已经训练好了样本库的,训练用的是证件照,每个人的证件照通过旋转一定角度从而分别形成十个样本. 用于识别的照片是普通的生活照,近距离的人脸照. 解决方案 如果OpenCV提供的库直接的识别率有那么高,就不会还有

利用opencv实现人脸识别

问题描述 利用opencv实现人脸识别 目前本人已实现实时人脸检测,但怎样进一步完成特征采集存入数据库,并将检测到的人脸与数据库中的比对却没有头绪.求助!!! 解决方案 建议先从几何角度入手.先通过两眼具体.眼嘴距离等.判断正面人脸.有经验后.再尝试其他算法

基于云计算的人脸识别系统研究与实现

基于云计算的人脸识别系统研究与实现 华南理工大学  李仕钊 本文完成的主要工作如下:1.以5台机器以Master/Slaver的结构,在linux系统下配置好网络.文件,并安装好相关的软件,从而完成Hadoop分布式系统的构建.2.基于人脸识别的整体架构,就特征提取和分类器设计两方面分析了各种常用人脸识别算法能否适应Hadoop下的MapReduce计算框架.而鉴别是否能够适合MapReduce计算框架的标准是计算的可分离度是否高,不可分离的计算是否计算量足够小.3.应用HOG特征在人脸识别上.

基于51单片机频率计的代码问题,求大神解答啦~

问题描述 基于51单片机频率计的代码问题,求大神解答啦~ 基于51单片机的频率计设计 软件设计原理:利用单片机内部资源,定时器0定时一秒,计数器1在1s内计数,从而计算得频率. 这样能测得1hz~450khz. 我想设定当频率小于10hz时,定时器0定时10s,计数器1在10s内计数,结果测得的数据除以10就得到频率,从而获得0.1hz~10hz更精确的频率. 现在代码测试的情况是:被测频率大于10hz没有问题,如果被测频率小于10hz,结果显示为10倍的频率,意思就是程序中没有除以10,怎么改

代码运行出错 select(1)=0

问题描述 代码运行出错 select(1)=0 我用了下这个程序,在 Pcum=cumsum(P);%cumsum计算数组各行的和 Select=find(Pcum>=rand); to_visit=J(Select(1));处出错,显示Select(1)=0 可以帮忙吗? 解决方案 不知道你用的是什么语言,建议你查查手册.