gpt4 book ai didi

pointers - OpenCV Visual-C++ cvSplit 问题

转载 作者:太空宇宙 更新时间:2023-11-03 22:35:24 25 4
gpt4 key购买 nike

我尝试了几种打开图像和拆分 channel 的方法。我只想使用 3 Matrix。我不知道怎么了。这是我的代码:

    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);。程序总是崩溃,我不知道为什么。

编辑 1:异常:

error -(206) Unrecognized or unsupported array type

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);

最佳答案

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

cvSplit 拿 cvMat* 和 iplImage* 不一样,你需要把它转换成 cvmat见http://opencv.willowgarage.com/documentation/cpp/c++_cheatsheet.html

关于pointers - OpenCV Visual-C++ cvSplit 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6969745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com