【发布时间】:2014-03-06 13:59:54
【问题描述】:
#include<highgui.h>
#include<cxcore.h>
#include<cv.h>
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char* argv[])
{
IplImage* img = cvLoadImage("hello.jpg", CV_WINDOW_FULLSCREEN );
int *img_data;
img_data = malloc(sizeof(*img_data)*img->height*img->width*img->nChannels);
if (!img)
{
printf("Image can NOT Load!!!\n");
return 1;
}
cvNamedWindow("myfirstwindow", CV_WINDOW_FREERATIO );
cvShowImage("myfirstwindow", img);
printf("Height: %d\nwidth: %d\nnchannels:%d\n",img->height,img->width,img->nChannels);
cvCvtColor(img,img_data,CV_RGB2XYZ);
cvWaitKey(0);
cvReleaseImage(&img);
return 0;
}
在这个程序中,我尝试使用函数 cvCvtColor 将 RGB 颜色模型转换为 XYZ 颜色模型。我收到如下所示的错误:
OpenCV 错误:cvarrToMat 文件中的参数错误(未知数组类型) /build/buildd/opencv-2.3.1/modules/core/src/matrix.cpp,第 646 行 在抛出“cv::Exception”实例后调用终止
什么():/build/buildd/opencv-2.3.1/modules/core/src/matrix.cpp:646: 错误:(-5) 函数 cvarrToMat 中的未知数组类型
任何帮助或建议将不胜感激。谢谢。
【问题讨论】:
-
您必须将 IplImage 作为第二个参数传递给 cvCvtColor,而不是像素指针(甚至是错误的类型,uchar* 不是 int*)。但是请停止使用过时的 C-API!
-
CV_WINDOW_FREERATIO 是 cvLoadImage 的无效参数,正如 haris 之前所说的
-
能否请您建议使用哪个 API。谢谢。
-
@berak... OP 使用的是纯 C 语言,而不是 C++。那么C++ api如何在C代码中使用呢。
标签: c opencv image-processing