バージョン 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 コード サンプルは正常にコンパイルされますが、動作しない結果は同じです。
多くのサンプル、問題の解決策、および jpeglib の使用方法に関するヒントをググってみました。ここで見つけた最も役立つ情報。しかし、結果として、独自の jpeg-tool または example.c をコンパイルすることはできませんでした (write_JPEG_file()
関数を書き直しました)。
質問#include "jpeglib.h"
: 他のすべてのプログラマーが jpeg 関数を正常に実行するためにコード内で使用する場合、基本的に何が間違っている可能性がありますか? 私にとって、このファイルを含めるだけでは十分ではないようです。そのため、私はあなたに質問し、私の問題を解決するのにも役立たなかった1年前の質問を再開する必要があります. これらの問題を解決しようと何度も試みているため、具体的なエラー メッセージをお伝えすることはできません。
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\サードパーティ\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)".
最初のシンボルは as で型jpeglib.h
定義JSAMPLE FAR *JSAMPROW
し、2 番目と 3 番目はrdjpgcom.c
asで定義する必要がありますunsigned int image_height, image_width;
運が良ければ、jpeglib を実行するために必要なことがわかったのかもしれません。現在の状態では、問題の解決策が正しいかどうかを確認し、再確認する必要があります。この度は、私の問題にご関心をお寄せいただき、誠にありがとうございます。解決策に確信が持てたらすぐに投稿します。
問題 解決策: jpeglib を使用するために OpenCV を正しくセットアップしませんでした。私が犯した間違いは、間違った *.lib-file をリンクすることでした。リンク用の適切なファイルはlibjpegd.lib
. jpeglib v6.2 が v9 ではなく OpenCV 2.4.6 に含まれているのは残念です。HAVE_JPEG
OpenCV 内で jpeglib 関数を使用するために追加するヒントは、完全に無視しました。今のところ、問題は解決しています。