解决方案 »

  1.   

    不用预处理,直接加载jpg格式的图像就可以,因为你是使用cvLoadImage("wiener.bmp",0);第二个参数决定了图像是以灰度图像的格式加载进来的。看代码逻辑没有问题,楼主可以debug跟踪一下是在cvLoadImage返回的是不是NULL,或者在save的时候是不是出错了。
    楼主这种处理像素代码影响效率的
    IplImage*src=NULL;
    src=cvLoadImage("wiener.bmp",0);
    if(src==NULL)
    {
      return -1;
    }
    LPBYTE pData = (LPBYTE)src->imageData;    for(int i=0;i<src->height;i++)
        {
            pData = (LPBYTE)src->imageData+src->widthStep;
            
            for(int j=0;j<src->width;j++)
            {
                if( pData[j]==30 )
                {
                    pData[j] = 0;
                     
                }
                else 
                {
                     pData[j] = 255;
                }
            }
        }
    cvSaveImage("gray_30.bmp",src);
      

  2.   

    我想问一下你的for循环里面的pData = (LPBYTE)src->imageData+src->widthStep;有什么作用?
      

  3.   

    不好意思,写错了应该是pData = (LPBYTE)src->imageData+src->widthStep*i;
    指向第i行像素的起始位置,这样在下一个for循环中直接使用pData[j]就可以
      

  4.   

    一副图像中的像素值为30的点 ?
    你这个是彩色图像啊,三个通道呢,怎么算的
    cvtcolor转换成灰度图才行吧
      

  5.   

    崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。