2011-08-06 2 views
0

이미지를 열고 채널을 분할하는 데 여러 가지 방법을 시도했습니다. 3 Matrix와 함께 작업하면됩니다. 뭐가 잘못 됐는지 나는 모르겠다. 여기 내 코드 :OpenCV Visual C++ cvSplit 문제

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; 

문제는 라인 cvSplit(&img, imgB, imgG, imgR, NULL);입니다. 이 프로그램은 항상 추락하고 나는 왜 그런지 모른다.

EDIT1 : 예외 :

오류 - (206) 인식 또는 지원되지 않는 어레이 형

Edit2가 :

An error occurred. 
..\..\..\..\ocv\opencv\src\cxcore\cxconvert.cpp:877: error: (-215) dvec[j].size(
) == src.size() && dvec[j].depth() == src.depth() && dvec[j].channels() == 1 && 
i < src.channels() 
: 난 img 대신 &img로 사용하는 경우 I이 예외를 얻을

솔루션 : 나는 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); 

답변