【问题标题】:Confusing errors with opencv cvLoadImage and netbeans与 opencv cvLoadImage 和 netbeans 混淆的错误
【发布时间】:2011-01-08 07:57:15
【问题描述】:

我找到了方便的 opencv 库,并尝试使用 C 编写一个简单的 imagemodifier。当我开始编译我的代码时,我遇到了一些错误,这有点令人困惑,因为它们似乎没有意义。这是我第一次使用 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:错误:预期的表达式 在“常量”之前

main.c:34:37:警告:字符 常量对于它的类型来说太长了

main.c:34: 错误:参数太少 函数‘cvLoadImage’

main.c:43:33:警告:字符 常量对于它的类型来说太长了

main.c:43: 错误:预期为“;”、“,”或 '\x2e6a7067'之前的')'

这些错误让我有点困惑,因为

  1. 引用 opencv c 引用 cvLoadImage 只需要两个参数。

  2. 为什么字符常量太长了?

  3. 'const' 之前的预期表达式?嗯……我完全不明白

  4. 在 '\x2e6a7067' 之前应该是';'、',' 或')'...好吧我也不明白

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

【问题讨论】:

    标签: c opencv compilation


    【解决方案1】:

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

    您需要在演员表周围加上括号:(const char *)x 可以,const char * x 不行(如果您将 x 声明为 const char * 也可以)。我认为您添加了该强制转换,因为编译器警告您“将 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);
    

    【讨论】:

    • 非常感谢,帮助很大。现在我可以继续测试和编写这个小程序了。
    • 我想我应该在我的屏幕旁边写一个注释“字符串用双引号,文字用单引号”,因为我之前多次犯过同样的错误,似乎我没有从中学到任何东西: )
    【解决方案2】:

    你应该学点c编程语言,拿本书什么的……

    正确的行是:

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

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

    【讨论】:

    • 嗯。你需要双引号,而不是单引号。看我的回复,或者一本书:-)。
    • 我承认,我在编程方面不是很有经验。我研究了几本书,但这些书并没有真正的帮助,因为我不知道该寻找什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 2014-04-22
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    相关资源
    最近更新 更多