
OpenCVでの画像サイズ取得について教えてください。
rawデータをjpgにして取得し、その画像を4分割したいのですがエラーが3つ出てしまいます。
環境はVisual Studio2008です。
いろいろと調べたのですが、原因や対策がはっきりわからず、書き変えてもNGで困っています。
エラー:その1
「error LNK2028:未解決のトークン(0A00007B)"extern "C" struct IplImage *_cdecl cvLoadImage(char const roi.obj*.int)"(cvLoadImage@@$$J0YAPAU IplImage@@PBDH@Z)が関数"int _codecl main(int,char * *)"(?main@@$$HYAHHPAPAD@Z)で参照されました。」
エラー:その2
「error LNK2019: 未解決の外部シンボル"extern "C" struct IplImage * codecl cvLoadImage(char const *.int)" (?cvLoadImage@@$$J0YAPAU IplImage@@PBDH@Z)が関数"int_codecl main(int, char * *)" (?main@@$$HYAHHPAPAD@Z)で参照されました。」
エラー:その3
「fatal error LNK1120: 外部参照2が未解決です]
'==================
#pragma warning(disable : 4819)
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#define DIVX (4)
#define DIVY (4)
#define DIVXY (DIVX*DIVY)
int main (int argc, char **argv)
{
int w, h
IplImage *img=0;
img=cvLoadImage("C:\・・・\\testfile.jpg, CV_LOAD_IMAGE_GRAYSCALE);
w = img->width - img->width % DIVX + DIVX;
h = img->height - img->height % DIVY + DIVY;
printf("幅は%w, 高さは%h です。 \n");
}
'===============================================
画像サイズを取得し、画像を4分割したあと、画素値を変更したいと思っています。
できればjpgに変換せず、rawデータそのものの精度の画像を直接扱いたいのですが、
その場合、cvLoadImageでどう表記すると実現できるのでしょうか。
また、OpenCVのグレースケールは、何チャンネルなのでしょうか。
プログラム経験はありますが、OpenCVを使うため、C言語の勉強も始めたばかりです。
なにか見当違いな質問をしていたら申し訳ありません。
お忙しいところすみませんが、もしどなたか解決策をアドバイスいただける方がいらっしゃると
大変助かります。
どうぞ宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
>より幅のある数字の情報を元に、機械がもう少し緻密な判断ができるようにするには、
>通常は何チャンネルを使うのがいいでしょうか。
それは「チャンネル数」ではなく「深さ/精度」です。
グレースケールは「明るさ」というチャンネル1つで表わすものです。その数値の範囲に、たとえば8bit整数(0~255)とか16bit整数(0~65535)とかの「深さ」があります。
また、浮動小数点を使った表現もできます。32bit(float型相当)と64bit(double型相当)のものが使えます。
チャンネル数は例えば、明るさの他に色相,彩度の3チャンネルとか、RGBの3チャンネルとかです。
>(グレースケールにもRGBで表現させるなど、何パターンかあるようですが)
すべての色をR=G=Bにすれば、実質グレースケールです。RGBカラーにしか対応していないフォーマットでグレースケールを表現するときに使います。
>チャンネル数の問題ではなく、その後どういう処理をするか、がポイントでしょうか。
浮動小数点を使って精度を上げた方がよいケースも、逆に、2値化した方がいいケースもあります。
kmee様
連日、わかりやすい回答をくださいましてありがとうございます。
考え違いしていたことがよくわかりました。
今回の目的には「深さ/精度」がポイントであって
浮動小数点を使って精度を上げた方がよいケースかもしれない、
と検討をつけることができました。
自分なりにいろいろと調べましたが行き詰っていたところに、
ここまでクリアなアドバイスをいただけまして
本当に助かりました。
いただいた情報を元に勉強して、進めてみます。
どうもありがとうございました!
No.1
- 回答日時:
まず、コンパイルエラー1,2は「追加ライブラリ」の設定がしてないためだと思われます。
cxcore.lib highgui.lib 等を追加する必要があります。1.x系と2.x系でファイルの名前と場所とか違ったと思うので、確認してください。
その3は上の2つがリンクできなかったので最終的な実行ファイルが作成できなかった旨を伝えるものです。なので、上のエラーがなくなれば出なくなります。
・RAWデータの読み込み
http://opencv.jp/opencv-2svn/c/reading_and_writi …
にあるように、cvLoadImageはRAW画像に対応していません。
また、RAW画像はカメラの機種、メーカーによりさまざまです。ヘッダがあって画像サイズ等の情報が埋め込まれているものもあれば、単純にデータが並んでいるだけのものもあります。
後者の場合は、なんらかの方法で画像サイズをプログラムに教える必要があります(プログラム中に#defineでベタ書きとか、コマンドライン引数にするとか、可逆圧縮または無圧縮フォーマットに変換しておくとか)
なんにせよ,RAWデータがどんな形式になっているかわからないことには、読み込み方法もわかりません。
・cvLoadImageでCV_LOAD_IMAGE_GRAYSCALEで読み込んだ場合、1チャンネルになります。
kmee様
こんなにもすぐに、詳細にアドバイスをくださいましてありがとうございました。
今日、早々にライブラリを追加したところ無事解決でき、ホッとました。
会社からログインできず、お礼の書き込みが遅くなりまして申し訳ありません。
RAWデータについて、ポイントがよくわかりました。
ヘッダがあるかどうか、また読み込み方法について、データの作成元に問い合わせてみます。
そもそも、パターン検出のために画像の白黒のコントラストを強めたい、という目的です。
cvLoadImageでCV_LOAD_IMAGE_GRAYSCALEで読み込むと1チャンネルとのことですが、
グラデーションをより緻密に表現するには、つまり
より幅のある数字の情報を元に、機械がもう少し緻密な判断ができるようにするには、
(グレースケールにもRGBで表現させるなど、何パターンかあるようですが)
通常は何チャンネルを使うのがいいでしょうか。
チャンネル数の問題ではなく、その後どういう処理をするか、がポイントでしょうか。
追加で質問をしてすみませんが、もし何かおわかりでしたらぜひアドバイスいただけると嬉しいです。
そもそもの3つの質問について、わかりやすく的確な回答をくださいまして
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++/MFCで error LNK2001
-
パブリックシンボルとは?
-
C言語のエラー LNK1120: 外部参照
-
popen・pcloseについて
-
c言語とfortranの混在プログラ...
-
外部依存関係について
-
OpenCVでの画像サイズ取得につ...
-
PathIsDirectoryを使って
-
外部シンボル" ~~"は未解決で...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
unsigned long long 型のフォー...
-
外部シンボル "_main"は未解決です
-
” OS ビルド ” の意味が分か...
-
MPI プログラム
-
デバッグとビルドは何が違うの...
-
sprintfの書式について
-
HANDLEの宣言でのエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
外部依存関係について
-
外部シンボル" ~~"は未解決で...
-
外部シンボルの未解決のエラー
-
LNK2019: 外部シンボル どのよ...
-
error LNK2001について
-
MFC C++ と C++/CLI の文字列
-
wsprintfのエラーについて
-
未解決の外部シンボル
-
PathIsDirectoryを使って
-
LNK2001(Pro*c)
-
C言語のエラー LNK1120: 外部参照
-
エラー 未解決の外部シンボル
-
C++ Builderでユニットの追加
-
パブリックシンボルとは?
-
IP Helper APIを使うとエラーが...
-
C++の関数をfortranから呼びた...
-
LNK2019: 未解決の外部シンボル...
-
『外部シンボル~未解決です。...
-
gdiplusのリンクエラー
-
このプログラムを動かしたいの...
おすすめ情報