cvLoadImage正在返回int?

时间:2017-08-28 09:51:33

标签: c opencv

根据OpenCV文档,cvLoadImage必须返回指向IplImage的指针,但看起来它正在返回int。

当我运行以下程序时,我会收到一些警告,显示在程序

下面
#include "highgui.h"
#include <stdio.h>

int main(int argc, char** argv)
{
    IplImage *img = cvLoadImage ("/path/to/file/face.jpg");
    if(img != NULL)
            printf("%d", img->width);
}

此外,当我运行上面的代码时,我得到分段错误,我猜测因为img是一个int因此当我尝试访问img-&gt; width时会导致崩溃,当编译上面的代码时出现警告

/usr/local/Cellar/opencv/3.3.0_3/include/opencv2/core/types_c.h:929:13: warning: 
      implicit declaration of function 'cvRound' is invalid in C99
      [-Wimplicit-function-declaration]
    ipt.x = cvRound(point.x);
            ^
    main.c:7:21: warning: implicit declaration of function 'cvLoadImage' is invalid
          in C99 [-Wimplicit-function-declaration]
        IplImage *img = cvLoadImage ("/path/to/file/face.jpg");
                        ^
    main.c:7:15: warning: incompatible integer to pointer conversion initializing
          'IplImage *' (aka 'struct _IplImage *') with an expression of type 'int'
          [-Wint-conversion]
        IplImage *img = cvLoadImage ("/path/to/file/face.jpg");

警告说来自int 的不兼容的转换,所以我将IplImage更改为int并且它工作正常并且它为img输出了一些负整数值

#include "highgui.h"
#include <stdio.h>

int main(int argc, char** argv)
{
    printf("%s\n","hello world");
    int img = cvLoadImage ("/path/to/file/face.jpg");
    printf("%d", img);
}

我收到上述程序的以下警告

implicit declaration of function 'cvRound' is invalid in C99
      [-Wimplicit-function-declaration]
    ipt.x = cvRound(point.x);
            ^
main.c:7:15: warning: implicit declaration of function 'cvLoadImage' is invalid
      in C99 [-Wimplicit-function-declaration]
    int img = cvLoadImage ("/path/to/file/face.jpg");

我无法弄清楚它,谷歌无法帮助,是否与OpenCV版本或C版本有关?,我正在使用Opencv2 3.3.0,请随时询问是否需要任何信息

1 个答案:

答案 0 :(得分:0)

第一个代码没有任何问题,如果使用g ++而不是gcc进行编译,则运行正常。

您隐含地从IplImage*转换为int的第二个代码错误且无法运行。

有关cvRound()功能的警告和错误与OpenCV C API有关,OpenCV C API暂时未更新,很可能在将来的版本中删除。大多数新的OpenCV功能仅存在于C ++ API中。

其他帖子中提到了有关C API中cvRound()功能的错误:

https://github.com/opencv/opencv/issues/6076

https://github.com/opencv/opencv/issues/8438

https://github.com/opencv/opencv/issues/8658

将来尝试使用OpenCV C ++ API以获得最佳结果。