#include "stdio.h"
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <cvaux.h>//必须引此头文件
/*
void main( )
{
//参数初始化定义
IplImage* pFrame = NULL; //每一帧
IplImage* pFrImg = NULL; //前景
IplImage* pBkImg = NULL; //背景
CvCapture* pCapture = NULL;
IplImage* origin_rgb = NULL ;//定义rgb空间的存储
IplImage* origin_ycc = NULL ;//定义转换成YCrCb空间的存储
IplImage* lumi = NULL ;//定义亮度分量的存储空间
//定义窗口
cvNamedWindow("frame",1);//定义显示窗口的名字,显示原始的视频
cvMoveWindow("frame",30,0);//定义显示窗口的位置
cvNamedWindow("background",1);//显示经过转换格式的视频
cvMoveWindow("background",360,0);
cvNamedWindow("foreground",1);//显示经过亮度提取的视频
cvMoveWindow("foreground",690,0);
//读取一帧视频文件作为初始化
//pCapture = cvCaptureFromFile("SAM_2334.MP4") ;
pCapture = cvCaptureFromFile("t.avi") ;
pFrame = cvQueryFrame(pCapture);
int i ;
for (i=0;i<2;i++)
{
pFrame = cvQueryFrame(pCapture);
}
//RGB转换成亮度
origin_rgb = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U, 3 );
origin_ycc = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U, 3 );
lumi = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U, 1 );
pFrImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U, 1 );
pBkImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U, 1 );
//origin_rgb = cvCloneImage(pFrame) ;//或者 cvCopy(pFrame,origin_rgb,NULL) ;
cvCopy(pFrame,origin_rgb,NULL) ;//复制视频
cvCvtColor(origin_rgb,origin_ycc,CV_BGR2YCrCb) ; //实现视频格式转换
cvSplit(origin_ycc,lumi,NULL,NULL,NULL); //获取亮度分量
//为高斯模型设置初时参数
CvGaussBGStatModelParams* params = new CvGaussBGStatModelParams;
params->win_size = 50; //初始化阶段的帧数,这个参数的倒数就是我们知道的背景模型的更新率
params->n_gauss = 3;// 高斯模型个数,这个参数看你用几层高斯模型了,一般选3
params->bg_threshold = 0.7;//高斯背景阈值
params->std_threshold = 3.5;//3.5 这个参数是当前面一个高斯权值的和的阈值
params->minArea = 15;//最小面积,,这个参数是用来去噪的
params->weight_init = 0.333;// 初始权重
params->variance_init = 30;// 初始方差
CvBGStatModel* bgModel = cvCreateGaussianBGModel(lumi,params);
int key=-1;
while( NULL != ( pFrame = cvQueryFrame(pCapture) ) )
{
//获取下一帧视频
if ( pFrame == NULL)
{
break;
}
cvCopy(pFrame,origin_rgb,NULL) ;//复制视频
cvCvtColor(origin_rgb,origin_ycc,CV_BGR2YCrCb) ; //实现视频格式转换
cvSplit(origin_ycc,lumi,NULL,NULL,NULL); //获取亮度分量
if( !pFrame )
break;
//更新高斯模型
cvUpdateBGStatModel(lumi,bgModel);
pFrImg = bgModel->foreground ;//前景图象
pBkImg = bgModel->background ; //背景图象
//将图象倒转过来
//pBkImg->origin = 1 ;
//pFrImg->origin = 1 ;
//lumi->origin = 1 ;
static int k = 0;
char tmpBuf[256]={'0'}; memset(tmpBuf, '0', sizeof(tmpBuf));
sprintf(tmpBuf, "dst//%d.jpg", k++);
printf("%s\n", tmpBuf);
cvSaveImage(tmpBuf, pFrImg);
//显示结果
cvShowImage("frame",lumi);
cvShowImage("background",pBkImg);
cvShowImage("foreground",pFrImg);
key = cvWaitKey(10);
}
// cvWaitKey(0) ;//窗口的回调函数,必须要的,不然窗口的显示会不正常
//释放窗口内存资源
cvDestroyWindow("frame");
cvDestroyWindow("background");
cvDestroyWindow("foreground");
//释放图象占用的内存资源
cvReleaseImage(&lumi);
cvReleaseImage(&pBkImg);
cvReleaseImage(&pFrImg);
cvReleaseCapture(&pCapture);
cvReleaseBGStatModel( &bgModel );
}
*/
/*
#include <time.h>
void callback( )
{
printf( "回调执行!\n" );
}
void func( void call() )
{
call( );
}
void f1(){
printf("begin\n");
}
void f2(){
printf("end\n");
}
void main( )
{
f1();
for (int i = 0; i < 2; i++ )
{
func( callback );
Sleep(1000);
}
f2();
}
*/
// 方法指针的格式为:int (*ptr)(char *p) 即:返回值(指针名)(参数列表)
typedef int (*CallBackFun)(char *p); // 为回调函数命名,类型命名为 CallBackFun,参数为char *p
int Afun(char *p) { // 方法 Afun,格式符合 CallBackFun 的格式,因此可以看作是一个 CallBackFun
printf("Afun 回调打印出字符%s!\n", p);
return 0;
}
int Cfun(char *p) { // 方法 Bfun,格式符合 CallBackFun 的格式,因此可以看作是一个 CallBackFun
printf("Cfun 回调打印:%s, Nice to meet you!\n", p);
return 0;
}
int call(CallBackFun pCallBack, char *p) { // 执行回调函数,方式一:通过命名方式
printf("call 直接打印出字符%s!\n", p);
pCallBack(p);
return 0;
}
// int call2(char *p, int (*ptr)(char *p))
int call2(char *p, int (*ptr)(char *p)) { // 执行回调函数,方式二:直接通过方法指针
printf("==============\n", p);
(*ptr)(p);
return 0;
}
int call3(char *p, CallBackFun pCallBack){ // 执行回调函数,方式一:通过命名方式
printf("--------------\n", p);
pCallBack(p);
return 0;
}
static int CALLBACK fun(){
printf("回调执行\n");
return 0;
}
typedef int (*funType)();
void callfun(funType f)
{
f();
}
#define N 5
int main() {
int a [N];
int i;
printf("请输入个数:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("请输出输入的数据:\n");
for(i=0;i<N;i++)
printf("%-5d",a[i]);
printf("\n");
return 0;
}
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <cvaux.h>//必须引此头文件
/*
void main( )
{
//参数初始化定义
IplImage* pFrame = NULL; //每一帧
IplImage* pFrImg = NULL; //前景
IplImage* pBkImg = NULL; //背景
CvCapture* pCapture = NULL;
IplImage* origin_rgb = NULL ;//定义rgb空间的存储
IplImage* origin_ycc = NULL ;//定义转换成YCrCb空间的存储
IplImage* lumi = NULL ;//定义亮度分量的存储空间
//定义窗口
cvNamedWindow("frame",1);//定义显示窗口的名字,显示原始的视频
cvMoveWindow("frame",30,0);//定义显示窗口的位置
cvNamedWindow("background",1);//显示经过转换格式的视频
cvMoveWindow("background",360,0);
cvNamedWindow("foreground",1);//显示经过亮度提取的视频
cvMoveWindow("foreground",690,0);
//读取一帧视频文件作为初始化
//pCapture = cvCaptureFromFile("SAM_2334.MP4") ;
pCapture = cvCaptureFromFile("t.avi") ;
pFrame = cvQueryFrame(pCapture);
int i ;
for (i=0;i<2;i++)
{
pFrame = cvQueryFrame(pCapture);
}
//RGB转换成亮度
origin_rgb = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U, 3 );
origin_ycc = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U, 3 );
lumi = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U, 1 );
pFrImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U, 1 );
pBkImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U, 1 );
//origin_rgb = cvCloneImage(pFrame) ;//或者 cvCopy(pFrame,origin_rgb,NULL) ;
cvCopy(pFrame,origin_rgb,NULL) ;//复制视频
cvCvtColor(origin_rgb,origin_ycc,CV_BGR2YCrCb) ; //实现视频格式转换
cvSplit(origin_ycc,lumi,NULL,NULL,NULL); //获取亮度分量
//为高斯模型设置初时参数
CvGaussBGStatModelParams* params = new CvGaussBGStatModelParams;
params->win_size = 50; //初始化阶段的帧数,这个参数的倒数就是我们知道的背景模型的更新率
params->n_gauss = 3;// 高斯模型个数,这个参数看你用几层高斯模型了,一般选3
params->bg_threshold = 0.7;//高斯背景阈值
params->std_threshold = 3.5;//3.5 这个参数是当前面一个高斯权值的和的阈值
params->minArea = 15;//最小面积,,这个参数是用来去噪的
params->weight_init = 0.333;// 初始权重
params->variance_init = 30;// 初始方差
CvBGStatModel* bgModel = cvCreateGaussianBGModel(lumi,params);
int key=-1;
while( NULL != ( pFrame = cvQueryFrame(pCapture) ) )
{
//获取下一帧视频
if ( pFrame == NULL)
{
break;
}
cvCopy(pFrame,origin_rgb,NULL) ;//复制视频
cvCvtColor(origin_rgb,origin_ycc,CV_BGR2YCrCb) ; //实现视频格式转换
cvSplit(origin_ycc,lumi,NULL,NULL,NULL); //获取亮度分量
if( !pFrame )
break;
//更新高斯模型
cvUpdateBGStatModel(lumi,bgModel);
pFrImg = bgModel->foreground ;//前景图象
pBkImg = bgModel->background ; //背景图象
//将图象倒转过来
//pBkImg->origin = 1 ;
//pFrImg->origin = 1 ;
//lumi->origin = 1 ;
static int k = 0;
char tmpBuf[256]={'0'}; memset(tmpBuf, '0', sizeof(tmpBuf));
sprintf(tmpBuf, "dst//%d.jpg", k++);
printf("%s\n", tmpBuf);
cvSaveImage(tmpBuf, pFrImg);
//显示结果
cvShowImage("frame",lumi);
cvShowImage("background",pBkImg);
cvShowImage("foreground",pFrImg);
key = cvWaitKey(10);
}
// cvWaitKey(0) ;//窗口的回调函数,必须要的,不然窗口的显示会不正常
//释放窗口内存资源
cvDestroyWindow("frame");
cvDestroyWindow("background");
cvDestroyWindow("foreground");
//释放图象占用的内存资源
cvReleaseImage(&lumi);
cvReleaseImage(&pBkImg);
cvReleaseImage(&pFrImg);
cvReleaseCapture(&pCapture);
cvReleaseBGStatModel( &bgModel );
}
*/
/*
#include <time.h>
void callback( )
{
printf( "回调执行!\n" );
}
void func( void call() )
{
call( );
}
void f1(){
printf("begin\n");
}
void f2(){
printf("end\n");
}
void main( )
{
f1();
for (int i = 0; i < 2; i++ )
{
func( callback );
Sleep(1000);
}
f2();
}
*/
// 方法指针的格式为:int (*ptr)(char *p) 即:返回值(指针名)(参数列表)
typedef int (*CallBackFun)(char *p); // 为回调函数命名,类型命名为 CallBackFun,参数为char *p
int Afun(char *p) { // 方法 Afun,格式符合 CallBackFun 的格式,因此可以看作是一个 CallBackFun
printf("Afun 回调打印出字符%s!\n", p);
return 0;
}
int Cfun(char *p) { // 方法 Bfun,格式符合 CallBackFun 的格式,因此可以看作是一个 CallBackFun
printf("Cfun 回调打印:%s, Nice to meet you!\n", p);
return 0;
}
int call(CallBackFun pCallBack, char *p) { // 执行回调函数,方式一:通过命名方式
printf("call 直接打印出字符%s!\n", p);
pCallBack(p);
return 0;
}
// int call2(char *p, int (*ptr)(char *p))
int call2(char *p, int (*ptr)(char *p)) { // 执行回调函数,方式二:直接通过方法指针
printf("==============\n", p);
(*ptr)(p);
return 0;
}
int call3(char *p, CallBackFun pCallBack){ // 执行回调函数,方式一:通过命名方式
printf("--------------\n", p);
pCallBack(p);
return 0;
}
static int CALLBACK fun(){
printf("回调执行\n");
return 0;
}
typedef int (*funType)();
void callfun(funType f)
{
f();
}
#define N 5
int main() {
int a [N];
int i;
printf("请输入个数:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("请输出输入的数据:\n");
for(i=0;i<N;i++)
printf("%-5d",a[i]);
printf("\n");
return 0;
}