0

我尝试使用现在在版本 9中可用的众所周知的“jpeglib” 。

概述:我是一名 C 语言编程初学者,使用MS Visual C++ 2010 Express并最终阅读了一本 C 书。我的目标是将 RGB(.bmp) 文件压缩为 JPEG。所以我下载了jpeglib (v9),阅读了所有的安装等 *.txt 文件。可以编译 C 文件以获得cjpeg.exedjpeg.exejpeg.lib等。

在这次成功之后,我尝试使用example.c来深入了解 jpeg 并控制压缩。-> 它没有用。然后我尝试使用 OpenCV 中包含的 jpeglib。相同的非工作结果,而 OpenCV 代码示例已成功编译。

我在 Google 上搜索了很多示例、问题解决方案以及如何使用 jpeglib 的提示。我在这里找到的最有用的信息。但结果我仍然无法编译我自己的 jpeg-tool 或 example.c(重写write_JPEG_file()函数)。

问题:当每个其他程序员只是#include "jpeglib.h"在他们的代码中使用他们的代码来成功运行 jpeg 函数时,基础可能是什么错误?对我来说,包括这个文件似乎还不够。因此,我不得不问你并重新启动一个一年前的问题,该问题也无助于解决我的问题。由于多次尝试解决这些问题,我无法向您提供具体的错误消息。

这是我当前使用 OpenCV 2.4.6 的MS-VC++2010 配置:

  1. C/C++ -> 常规 -> 附加包含目录:
    • C:\opencv\构建\包括
    • C:\opencv\build\include\opencv
    • C:\opencv\build\include\opencv2
    • C:\opencv\包括
    • C:\opencv\include\opencv
    • C:\opencv\include\opencv2
    • C:\opencv\3rdparty\libjpeg
  2. 链接器 -> 常规 -> 附加库目录:
    • C:\opencv\build\x86\vc10\lib
  3. 链接器 -> 输入 -> 附加依赖项:
    • opencv_core246d.lib
    • opencv_imgproc246d.lib
    • opencv_highgui246d.lib
    • opencv_ml246d.lib
    • opencv_video246d.lib
    • opencv_features2d246d.lib
    • opencv_calib3d246d.lib
    • opencv_objdetect246d.lib
    • opencv_contrib246d.lib
    • opencv_legacy246d.lib
    • opencv_flann246d.lib
    • jpeg.lib [这个我添加到C:\opencv\build\x86\vc10\lib ]

最后,我已经阅读了一些线程:

如果您想知道缺少什么,我会尽力添加此信息!

编辑 - 一些错误信息:

1>jpeg_coder.obj : error LNK2001: unresolved external symbol ""unsigned char * image_buffer" (?image_buffer@@3PAEA)".

1>jpeg_coder.obj : error LNK2001: unresolved external symbol ""int image_height" (?image_height@@3HA)".

1>jpeg_coder.obj : error LNK2001: unresolved external symbol """int image_width" (?image_width@@3HA)".

第一个符号应该在jpeglib.has中定义类型JSAMPLE FAR *JSAMPROW,第二个和第三个在rdjpgcom.cas中定义unsigned int image_height, image_width;

也许,运气好的话,我想出了要让 jpeglib 运行需要做些什么。在当前状态下,我必须检查并仔细检查我的问题解决方案是否正确。在这一点上,非常感谢您对我的问题的关注。一旦我确定解决方案,我会发布它。

问题解决方案:我没有正确设置 OpenCV 以使用 jpeglib。我犯的错误是链接了错误的 *.lib 文件。链接的正确文件是libjpegd.lib. 太糟糕了 jpeglib v6.2 包含在 OpenCV 2.4.6 而不是 v9 中。我完全忽略了在 OpenCV中添加HAVE_JPEG使用 jpeglib 函数的提示。现在问题已经解决了。

4

1 回答 1

0

问题解决方案:我没有正确设置 OpenCV 以使用 jpeglib。我犯的错误是链接了错误的 *.lib 文件。

链接的正确文件是libjpegd.lib.

太糟糕了 jpeglib v6.2 包含在 OpenCV 2.4.6 而不是 v9 中。我完全忽略了在 OpenCV中添加HAVE_JPEG使用 jpeglib 函数的提示。感谢所有尝试解决此问题的人。现在问题已经解决了。

于 2013-10-19T15:20:31.247 回答