使用opencv cvLoadImage和netbeans混淆错误

时间:2010-01-22 18:11:24

标签: c opencv compilation

我找到了方便的opencv库,并尝试使用C编写一个简单的图像修改器。当我开始编译我的代码时,我遇到了一些错误,这有点令人困惑,因为它们似乎没有意义。这是我第一次使用netbeans进行编程时,我第一次尝试制作除了那些基本的计算器等程序之外的东西。下面是代码和编译器给出的错误:

int iscolor = -1; /* Used to load the image as it is*/
IplImage* image = 0;

/* Load Image */
image = cvLoadImage(const char* 'test.jpg', iscolor); /* line 34 */

/*Modify image*/
...

/* Save Image */
int cvSaveImage(const char* 'modified.jpg', const CvArr* image); /* line 43 */

/*End*/

编译器错误

  

main.c:在函数'main'中:

     

main.c:34:错误:预期表达式   在'const'之前

     

main.c:34:37:警告:性格   对于它的类型来说,它常常太长了

     

main.c:34:错误:参数太少   function'cvLoadImage'

     

main.c:43:33:警告:性格   对于它的类型来说,它常常太长了

     

main.c:43:错误:预期';',','或   ')'之前'\ x2e6a7067'

这些错误让我感到困惑,因为

  1. 引用opencv c引用cvLoadImage只需要两个参数。
  2. 为什么角色常数太长了?
  3. 'const'之前的预期表达式?哼哼......我根本不懂这个
  4. 预期';',','或')'在'\ x2e6a7067'之前'......好吧我也没有得到这个

    那么有人能告诉我我做错了什么吗?任何帮助都会很好:)

2 个答案:

答案 0 :(得分:2)

在C中,单引号用于表示单个(文字)字符常量,此类常量的结果类型为int。因此,'a'没问题,'a1'不是,因为这是两个字符。 C定义了一些转义序列,例如'\n',它被视为表示换行符的一个字符,或'\xff',它是具有十六进制值0xff的字符。由于'test.jpg'包含多个字符,编译器会告诉您文字字符常量太长。你想要一个需要双引号的字符串。

你需要在演员表周围放置括号:(const char *)x没关系,const char * x不是(如果你将x声明为const char *,那就没关系)。我认为你添加了cast,因为编译器警告你“将int转换为没有强制转换的指针”。一般来说,除非你真的知道自己在做什么,否则让编译器沉默是个坏主意。

基于以上所述,第34行应该是:

image = cvLoadImage("test.jpg", iscolor);

如果您真的想将"test.jpg"投射为const char *,请执行:

image = cvLoadImage((const char *)"test.jpg", iscolor);

此外,现在您知道如何修复此行:

int cvSaveImage(const char* 'modified.jpg', const CvArr* image);

答案 1 :(得分:0)

你应该学习一些c编程语言,拿一本书或其他东西......

正确的行将是:

34:image = cvLoadImage('test.jpg',iscolor);

43:int result = cvSaveImage('modified.jpg',image);