【问题标题】:Error converting IplImage** to IplImage*将 IplImage** 转换为 IplImage* 时出错
【发布时间】:2011-11-22 01:42:16
【问题描述】:
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** {aka _IplImage*}’转换为‘IplImage {aka _IplImage*}’。我正在尝试在这里加载多个图像。我究竟做错了什么?谢谢!

【问题讨论】:

    标签: image opencv iplimage


    【解决方案1】:

    您将“img”声明为指向 IplImage 的指针,然后尝试将其转换为指向指针的指针。 (IplImage**) - 对于这种特殊情况,这种类型转换是不正确的,因为您试图将 IplImage** 分配给 IplImage*。

    将img声明为:IplImage **img;

    【讨论】:

    • 如果 img 被声明为 IplImage **img,那么如何访问它的宽度和高度?以及如何正确使用函数作为 cvSetImageROI?什么是正确的语法,因为在如上所述声明 img 后我遇到了问题。非常感谢!
    • 可以这样想:如果我们声明一个指向对象或任意数据类型的指针,比如 int* pointerToInt;我们可以使这个指针指向(简单地说)一个整数数组。如果我们这样做(无论是静态的还是动态的),我们就可以通过说:pointerToInt[N] 来访问我们数组的第 N 个成员。请注意,即使我们动态声明我们的数组 (int* pointerToInt = new int[MagicalNumber]) 并因此声明我们有一个指针,我们仍然可以通过数组下标运算符 [] 访问它。所以 pointerToInt[MagicalNumber-1] 有效。同样适用于二维数组。
    • 我们有 int** pointerToIntPointer - 这声明了一个指向指针的指针。动态分配这将涉及一个循环,我不想在这里详细说明,但我们可以再次静态地说:int pointerToIntPointer[MagicalNumber0][MagicalNumber1];然后使用数组下标运算符访问数组 - int pointerToIntPointer[MagicalNumber0-1][MagicalNumber1-1];我们可以对类似于“原始指针”的动态分配数组执行相同的语法。也永远不要忘记删除[]您动态分配的数组! :) 只是说。
    • 抱歉,顺便说一下可能造成的混乱,new 是 c++ 的 malloc 版本,而 delete 是邪恶的双胞胎免费。改掉这个习惯可能很困难。 (如果您对数组下标的工作原理感兴趣,本主题将进一步引向“指针算法”。)
    【解决方案2】:

    试试这个

    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 指针

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-28
        • 1970-01-01
        • 2011-06-07
        • 1970-01-01
        相关资源
        最近更新 更多