本文主要是介绍declaration may not appear after executable statement in block,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
所以把EMCV库里面的 cv cxcore文件夹里面的文件都复制到/demo/MyImageGray/codec/filecopy_dec/下面,然后在filecopy_dec.c中添加需要的结构
参考igor_facedetect.c里面用到的几个函数,只要那些函数包括在emcv中,基本就可以移植了。
首先 在 filecopy_dec.c 文件夹里面添加 #include"cv.h" 然后编译,会提示不少错误,都是一些语法问题的错误,有点基本C语言的基础都能修正,没有太大的问题。
这个函数中提示找不到 width 和 height这两个量。在OPENCV论坛里面有人说过这个,所以知道把width 和 height 改成 下面那种形式就可以了。参考下mat的定义,
也就知道为什么这么改了
CV_INLINE CvSize cvGetMatSize( const CvMat* mat )
{
// CvSize size = { mat->width, mat->height };
CvSize size;
size.width = mat->cols;
size.height = mat-> rows;
// = { mat->cols, mat->rows };
return size;
}
修正一大堆语法错误以后在filecopy_dec.c 文件的PictureGray 中添加我们想要的数据结构 IplImage
然后编译
"filecopy_dec.c", line 200: error #270: declaration may not appear after executable statement in block
这个提示的意思大概是一个声明语句,要放在一个函数的开头,没有写执行语句之前。否则就会出现这个错误。
所以把这个IplImage的定义提到函数外 错误就削除了,改后的函数如下#define IMAGESIZE (720*480)
static void PictureGray(void *pInbuf,void *pOutbuf,unsigned int len){unsigned int i;unsigned int * pIn = (unsigned int*)pInbuf;unsigned int * pOut= (unsigned int*)pOutbuf;unsigned char image[IMAGESIZE];len >>= 2;iplImage = cvCreateImageHeader(cvSize(720,480),IPL_DEPTH_8U,1);cvSetData(iplImage,image,720);
for(i=0;i<len;i++){*pOut = *pIn & 0xff00ff00|0x00800080; image[i] = *( (unsigned char *)pIn +1 );image[i+1] = *( (unsigned char *)pIn +3) ; //get the Y in image[] form a gray image by dickpIn ++;pOut ++;}cvReleaseImageHeader(&iplImage);}
其实添加的部分就是把亮度提取出来变成一副图像,添加人脸识别只要在这个灰度图像上检测,然后根据检测结果去修改显示buffer就OK了,
暂时想到的就是这样做
明天继续吧。
这篇关于declaration may not appear after executable statement in block的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!