我尝试使用现在在版本 9中可用的众所周知的“jpeglib” 。
概述:我是一名 C 语言编程初学者,使用MS Visual C++ 2010 Express并最终阅读了一本 C 书。我的目标是将 RGB(.bmp) 文件压缩为 JPEG。所以我下载了jpeglib (v9),阅读了所有的安装等 *.txt 文件。可以编译 C 文件以获得cjpeg.exe、djpeg.exe、jpeg.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 配置:
- 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
- 链接器 -> 常规 -> 附加库目录:
- C:\opencv\build\x86\vc10\lib
- 链接器 -> 输入 -> 附加依赖项:
- 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 ]
最后,我已经阅读了一些线程:
- 在 OpenCV 中使用 libjpeg 将 IplImage 压缩为 JPEG - 1
- 在 OpenCV 中使用 libjpeg 将 IplImage 压缩为 JPEG - 2
- 在使用 libjpeg 读取 JPEG 文件时需要帮助
- 如何在 libjpeg-turbo 中使用 jpeg_mem_src、jpeg_mem_dest?
如果您想知道缺少什么,我会尽力添加此信息!
编辑 - 一些错误信息:
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
as中定义类型JSAMPLE FAR *JSAMPROW
,第二个和第三个在rdjpgcom.c
as中定义unsigned int image_height, image_width;
也许,运气好的话,我想出了要让 jpeglib 运行需要做些什么。在当前状态下,我必须检查并仔细检查我的问题解决方案是否正确。在这一点上,非常感谢您对我的问题的关注。一旦我确定解决方案,我会发布它。
问题解决方案:我没有正确设置 OpenCV 以使用 jpeglib。我犯的错误是链接了错误的 *.lib 文件。链接的正确文件是libjpegd.lib
. 太糟糕了 jpeglib v6.2 包含在 OpenCV 2.4.6 而不是 v9 中。我完全忽略了在 OpenCV中添加HAVE_JPEG
使用 jpeglib 函数的提示。现在问题已经解决了。