画像を開いてチャンネルを分割する方法をいくつか試しました。私は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:私はimg
代わりの&img
を使用している場合、私はこの例外を取得:
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()
解決策: 私は気づいていませんでした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);
投稿投稿 – vo1d
ありがとう – vo1d