Pointers OpenCV Visual-C++;CVP分裂问题

Pointers OpenCV Visual-C++;CVP分裂问题,pointers,opencv,visual-c++-2010,Pointers,Opencv,Visual C++ 2010,我尝试了几种方法来打开图像和分割频道。我只想和3个矩阵一起工作。我不知道怎么了。 这是我的代码: IplImage* img = cvLoadImage( "C:\\foo.jpg" ); cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE ); cvShowImage( "Example1", img ); std::cout << "Hight: " << img->height << " Widt

我尝试了几种方法来打开图像和分割频道。我只想和3个矩阵一起工作。我不知道怎么了。 这是我的代码:

    IplImage* img = cvLoadImage( "C:\\foo.jpg" ); 
cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE ); 
cvShowImage( "Example1", img );
std::cout << "Hight: " << img->height << " Width: " << img->width;

CvMat* imgR= cvCreateMat(img->width,img->height,CV_8UC1);
CvMat* imgG= cvCreateMat(img->width,img->height,CV_8UC1);
CvMat* imgB= cvCreateMat(img->width,img->height,CV_8UC1);

cvSplit(&img, imgB, imgG, imgR, NULL);

cvWaitKey(0);
cvReleaseImage( &img );
cvDestroyWindow( "Example1" );
return 0;
解决方案: 我不知道cv::Mat、cvMat和IplImage之间的区别。 这就是解决方案:

    IplImage *r = cvCreateImage(cvGetSize(img), img->depth, 1);
    IplImage *g = cvCreateImage(cvGetSize(img), img->depth, 1);
    IplImage *b = cvCreateImage(cvGetSize(img), img->depth, 1);

    cvSplit(img, b, g, r, NULL);

如果cvloadImage返回一个指向iplImage的指针,那么您不需要img上的“&”,它已经是一个指针了

cvSplit接受cvMat*a iplImage*不一样,您需要将其转换为cvMat 看

    IplImage *r = cvCreateImage(cvGetSize(img), img->depth, 1);
    IplImage *g = cvCreateImage(cvGetSize(img), img->depth, 1);
    IplImage *b = cvCreateImage(cvGetSize(img), img->depth, 1);

    cvSplit(img, b, g, r, NULL);