pgray = cvCreateImage(cvSize(pFrame->width, pFrame->height),  IPL_DEPTH_8U,1);
             cvCvtColor(pFrame, pgray, CV_BGR2GRAY);
             pgray->origin=1; pFrame指向原始彩色图像。为什么先定义了8位深的图像空间,然后再cvCvtColor,怎么转换后得到的图像还是24位深?这样不会溢出?(因为先之定义了8位的图像)

解决方案 »

  1.   

    这个opencv也挺奇怪:
           IplImage *result = NULL;
                       result = cvCreateImage(size, IPL_DEPTH_8U, 1);//这才分配数据空间
                       for (int i=0; i<size.height; i++) {
                       for (int j=0; j<size.width; j++) {
                       cvSet(result, CV_RGB(255,255,255), NULL);
                        }
                }这也是先分配一个八位深的图像空间,然后再初始化图像像素值,但是初始化怎么要对3个通道 CV_RGB(255,255,255) 进行初始化而不是一个通道?
    八位深的图像不是一个通道吗?
      

  2.   

    八位深意味着有2^8=256种颜色.任何一种颜色值永远都是CV_RGB(x,y,z)
    LZ对图像的基础知识得再学习.
      

  3.   

    ls理解错了。
    我的意思是我定义了八位深(cvCreateImage)单通道(1)的图像。
    为什么后来得到的却是3通道的图像?因为定义cvCreateImage(size, IPL_DEPTH_8U, 1) 这儿1就表示单通道了。
      

  4.   

    是这样,我把图像保存起来,不是24位是8位深的。但是把连续图像保存成avi视频后又变成了3通道24位深了但是为啥单通道图像要在初始化时对三个通道赋值还是不解,不是只有一个通道吗?
           IplImage *result = NULL;
                       result = cvCreateImage(size, IPL_DEPTH_8U, 1);//这才分配数据空间
                       for (int i=0; i<size.height; i++) {
                       for (int j=0; j<size.width; j++) {
                       cvSet(result, CV_RGB(255,255,255), NULL);
                        }
                }
      

  5.   

    cvLoadImage的时候第二个参数CV_LOAD_IMAGE_GRAYSCALE