2011-11-21 61 views
0
IplImage *img; 
img = (IplImage **)malloc(IMAGE_NUM * sizeof(IplImage *)); 

for(index=0; index<IMAGE_NUM; index++){ 
    sprintf(filename, "preproc/preproc%d.jpg", index); 
    img = cvLoadImage(filename, 0); 
} 

嗨!这段代码在这里产生错误:在分配无法转换“的IplImage ** {又名_IplImage * }”到“的IplImage {又名_IplImage *}”。我想在这里加载多个图像。我究竟做错了什么?谢谢!错误转换的IplImage **来的IplImage *

回答

0

你声明“IMG”是一个指针IplImage的,然后你想将其转换为指针的指针。 (IplImage**) - 由于您试图将IplImage **分配给IplImage *,因此此类型转换对于此特定情况不正确。

申报IMG为:的IplImage ** IMG;

+0

如果IMG被声明为的IplImage ** IMG,那我怎么才能访问它的宽度和高度?我怎样才能正确使用函数作为cvSetImageROI?什么是正确的语法,因为我在声明如上所述的img后遇到问题。非常感谢你! – cmsl

+0

可以这样想:如果我们声明一个指向对象或任意数据类型的指针,比如int * pointerToInt;我们可以使这个指针指向(简单地说)一个整数数组。如果我们这样做(无论是静态的还是动态的),我们可以通过说:pointerToInt [N]来访问我们数组的第N个成员。请注意,即使我们动态声明数组(int * pointerToInt = new int [MagicalNumber])并因此确实声明我们有指针,我们仍然可以通过数组下标运算符[]来访问它。所以pointerToInt [MagicalNumber-1]的作品。同样适用于2D阵列。 – ScarletAmaranth

+0

我们有int ** pointerToIntPointer - 它声明了一个指向指针的指针。动态分配这将涉及一个循环,我不想在这里详细说明,但我们可以静态地说:int pointerToIntPointer [MagicalNumber0] [MagicalNumber1];然后用数组下标运算符访问数组--int int pointerToIntPointer [MagicalNumber0-1] [MagicalNumber1-1];我们可以对动态分配的数组执行相同的语法,它类似于“原始指针”多一点。同时不要忘记删除[]你动态分配的数组! :) 只是在说'。 – ScarletAmaranth

0

试试这个

IplImage** img; 
img = (IplImage**)malloc(IMAGE_NUM * sizeof(IplImage *)); 

for(index=0; index<IMAGE_NUM; index++){ 
    sprintf(filename, "preproc/preproc%d.jpg", index); 
    *img = cvLoadImage(filename, 0); 
} 

顺便说一下,下一个错误,你会得到的将是每个循环后没有进展的IMG指针迭代

0

尝试宣告IplImage** img;,然后img[index] = cvLoadImage(filename, 0),因为img是一个IplImage指针数组和cvLoadImage()返回一个图像。