【发布时间】:2013-10-16 10:36:34
【问题描述】:
我尝试使用version 9 中现在提供的众所周知的“jpeglib”。
概述:我是一名使用MS Visual C++ 2010 Express的C语言编程初学者,最后阅读了一本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 函数,那么基础知识可能有什么问题?对我来说,包括这个文件似乎还不够。因此,我不得不问你并重新启动一岁的Question,这也无助于解决我的问题。由于多次尝试解决这些问题,我无法向您提供具体的错误消息。
这是我目前使用 OpenCV 2.4.6 的 MS-VC++2010 配置:
- 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
- 链接器 -> 常规 -> 附加库目录:
- 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]
最后我已经阅读了一些主题:
- Compressing IplImage to JPEG using libjpeg in OpenCV - 1
- Compressing IplImage to JPEG using libjpeg in OpenCV - 2
- Need help in reading JPEG file using libjpeg
- how can i use jpeg_mem_src, jpeg_mem_dest in libjpeg-turbo?
如果缺少您想知道的内容,我会尽力添加此信息!
编辑 - 一些错误信息:
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.h、jdatadst.c、jcapimin.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...