现在的位置: 首页 > 综合 > 正文

case语句跳过变量初始化的问题

2014年01月03日 ⁄ 综合 ⁄ 共 1955字 ⁄ 字号 评论关闭

天写程序遇到了一个问题,错误如下:

代码如下:

switch(m_Radio_Contour)
  {
  case 0:
   //Sobel算子边缘检测
   Ptr<IplImage> pImage=NULL;
   Ptr<IplImage> pImgSobelGray=NULL;
   Ptr<IplImage> pImg8u=NULL;
   Ptr<IplImage> pImg8uSmooth=NULL;
   Ptr<IplImage> pImgColor=NULL;
   Ptr<IplImage> pImgSobelColor=NULL;
   Ptr<IplImage> pImgPlanes[3]={NULL,NULL,NULL};
   //创建打开图像的副本,并开闭空间用来存储处理后的结果
   pImage=cvCloneImage(img);
   pImg8u=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
   pImg8uSmooth=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
   //RGB到GRAY的图像转换
   cvCvtColor(pImage,pImg8u,CV_RGB2GRAY);
   //图像的高斯滤波
   cvSmooth(pImg8u,pImg8uSmooth,CV_GAUSSIAN,3,0,0);
   //建立位深为16位的新图像区域,因为Sobel算子要求图像的位深为16位、
   pImgSobelGray=cvCreateImage(cvGetSize(pImage),IPL_DEPTH_16S,1);
   //计算一阶X方向的图像差分
   cvSobel(pImg8uSmooth,pImgSobelGray,0,1,3);
   cvConvertScaleAbs(pImgSobelGray,pImg8u,1,0);
   cvvNamedWindow("Sobel Gray Image",1);
   cvvShowImage("Sobel Gray Image",pImg8u);

………………………………
看了一下网页,是说这个case 语句可能没有被执行到(执行其他case了)导致变量没有初始化而导致接下来的错误,所以需要把变量放到switch前面声明初始化,可是我又不想把初始化放在switch前面,还有一个解决方法,在swith中定义内部变量加括号,就可以了。

switch(m_Radio_Contour)
  {
  case 0:

{
   //Sobel算子边缘检测
   Ptr<IplImage> pImage=NULL;
   Ptr<IplImage> pImgSobelGray=NULL;
   Ptr<IplImage> pImg8u=NULL;
   Ptr<IplImage> pImg8uSmooth=NULL;
   Ptr<IplImage> pImgColor=NULL;
   Ptr<IplImage> pImgSobelColor=NULL;
   Ptr<IplImage> pImgPlanes[3]={NULL,NULL,NULL};
   //创建打开图像的副本,并开闭空间用来存储处理后的结果
   pImage=cvCloneImage(img);
   pImg8u=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
   pImg8uSmooth=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
   //RGB到GRAY的图像转换
   cvCvtColor(pImage,pImg8u,CV_RGB2GRAY);
   //图像的高斯滤波
   cvSmooth(pImg8u,pImg8uSmooth,CV_GAUSSIAN,3,0,0);
   //建立位深为16位的新图像区域,因为Sobel算子要求图像的位深为16位、
   pImgSobelGray=cvCreateImage(cvGetSize(pImage),IPL_DEPTH_16S,1);
   //计算一阶X方向的图像差分
   cvSobel(pImg8uSmooth,pImgSobelGray,0,1,3);
   cvConvertScaleAbs(pImgSobelGray,pImg8u,1,0);
   cvvNamedWindow("Sobel Gray Image",1);
   cvvShowImage("Sobel Gray Image",pImg8u);

………………………………

}

case 1:

 

至此,问题解决了。

抱歉!评论已关闭.