根据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,请随时询问是否需要任何信息
答案 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以获得最佳结果。