【问题标题】:How to setup jpeglib with MS Visual C++ 2010 Express如何使用 MS Visual C++ 2010 Express 设置 jpeglib
【发布时间】:2013-10-16 10:36:34
【问题描述】:

我尝试使用version 9 中现在提供的众所周知的“jpeglib”。

概述:我是一名使用MS Visual C++ 2010 Express的C语言编程初学者,最后阅读了一本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 函数,那么基础知识可能有什么问题?对我来说,包括这个文件似乎还不够。因此,我不得不问你并重新启动一岁的Question,这也无助于解决我的问题。由于多次尝试解决这些问题,我无法向您提供具体的错误消息。

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

  1. C/C++ -> 常规 -> 附加包含目录:
    • C:\opencv\build\include
    • C:\opencv\build\include\opencv
    • C:\opencv\build\include\opencv2
    • C:\opencv\include
    • 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.h 中定义为JSAMPLE FAR *JSAMPROW, 第二个和第三个在rdjpgcom.c 中定义为unsigned int image_height, image_width;

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

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

【问题讨论】:

  • 问题这么长,但你没写具体怎么写It did not work
  • 抱歉这个问题太长了! 它不起作用意味着缺少位于jpeglib.hjdatadst.cjcapimin.c 和更多文件中的几个声明或函数。我什至没有弄清楚哪些文件需要获取是可编译的文件集(最小配置)。
  • 要获得问题的答案,您需要提供错误消息 - 编译器或链接器错误、运行时崩溃信息等。
  • opencv 已经附带了 libjpeg(第 3 方),那么为什么要自己推出呢?你需要做的就是imwrite("my.jpg",img);,你就完成了。
  • 我注意到 OpenCV 带有 jepglib。这就是为什么我现在的注意力集中在它上面。网络中某处写道:要在 OpenCV 中激活 jpeglib,必须将 HAVE_JPEG 添加到 highgui.h。但是这个文件存在四次,向它们添加#define HAVE_JPEG 不会改变任何内容。我不知道我使用这个命令是否正确。此外,我不知道如何操作 OpenCV-jpeg-coding-with-activated-jpeglib 例如修改 DCT...

标签: opencv libjpeg


【解决方案1】:

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

链接的正确文件是libjpegd.lib

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

【讨论】:

    猜你喜欢
    • 2013-04-28
    • 2013-07-02
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2013-10-07
    相关资源
    最近更新 更多