OCRを使ったプログラミングについて

[戻る]
グウ 2004/01/27(火) 16:17:34
始めまして。どうにもこうにもわからいのでお願いします!どなたか教えてください。
OCRを使って文字認識をする際に画像の読み込みができません。
下にかいたとうりに実行すると、「値が割り当てられていない」となってしまいます。

HBITMAP hBitmap;

//【 画像メモリの読み込み 】
    if (!YndSetImage(hBitmap,NULL, &wErrorCode)){
        //YndSetImage()の呼びだし
        //hBitmap    : DIBのハンドル
        //NULL        : 進捗表示をOCRSYS.DLLにまかせる
        //&wErrorCode    : エラーコードが返される

        strErrorMsg.Format("画像が読み込めません [%d]",wErrorCode);
        AfxMessageBox(strErrorMsg);
        YndEnd();// 【 終了処理 】YndEnd()の呼び出し
//
これはhBitmapの型がちがうとかでしょうか?
よろしくお願いいたします。

2004/01/27(火) 16:27:25
質問内容の YndSetImage() というのは、
http://ai2you.com/ocr/sdk/sdk2.asp に載っている関数のことですか?

もしそうなら、問い合わせ先となっている「エー・アイ・ソフト株式会社」へ
聞いて見るのも手と思われます。

「エー・アイ・ソフト株式会社」から販売されているSDKキットを
もっていない人にはわからないお話と思われます。

2004/01/27(火) 19:01:45
提示されたコードだけから判断するなら、変数 hBitmap に適切な値が入っていない
ということも考えられますね

グウ 2004/01/28(水) 01:49:41
適切な値が入っていない?とはどこに値を入れたらいいのでしょうか?(初心者すぎて
申し訳ありません・・・)

wood 2004/01/28(水) 08:05:39
「ん」さんの紹介ページの説明から察すると
>//【 画像メモリの読み込み 】
ここの行に達するまでにきちんと「hBitmap」に値がセットされてますか?

つまり
>YndSetImage
を使用する前にメモリへ画像データがロードされていなければならないようですが

SDKは持ち合わせていないので文章からはこの程度しか回答できません

2004/01/28(水) 08:24:46
>適切な値が入っていない?とはどこに値を入れたらいいのでしょうか
これは、hBitmap は宣言しかしていないということですね?

ビットマップ等の GDI オブジェクトハンドルは宣言しただけでは具体的なものを示す
訳ではありません。これは int 型の変数についても同じことが言えます。

int i;

と宣言しただけでは変数 i の値が何かは判りませんね

ところで、あなたの開発条件(OS, VC++ のバージョンや MFC を使っているかどうか等)
がつかめないとこれ以上細かいことはお返事しにくいので、知らせてください

ハンドル hBitmap が DIB のハンドルという説明がついていますが DIB と DDB との
区別はわかりますか
それから、msdn ライブラリーで CreateDIBSection() 等についても調べて下さい

はち 2004/02/03(火) 15:03:56
開発条件はwin98でMFC使用してます。
DIBはSee device-independent bitmap、
DDBはSee device-dependent bitmap. ??とかいてありました。
CreateDIBSection() はThe CreateDIBSection function creates a device-independent 
bitmap (DIB) that applications can write to directly. The function gives you a 
pointer to the location of the bitmap's bit values. You can supply a handle to 
a file mapping object that the function will use to create the bitmap, or you 
can let the system allocate the memory for the bitmap.でした。よくわかりませ
ん・・。

戸田 2004/02/03(火) 15:44:54
翻訳使えば一発。
CreateDIBSection()はThe CreateDIBSection機能は、適用が直接書くことができるデバイス
インディペンデントのビットマップ(DIB)を作成します。機能は、ビットマップのビット価値の
位置へあなたにポインターを与えます。ビットマップを作成するために機能が使用するファイル
写像オブジェクトにハンドルを供給することができます。あるいは、システムにビットマップに
メモリを分配させることができます。

グウ 2004/02/03(火) 17:25:19
>ハンドル hBitmap が DIB のハンドルという説明がついていますが DIB と DDB との
区別はわかりますか

あまりわかりません。

n 2004/02/03(火) 18:00:01
読み込むべき画像はどこにあるんですか?

グウ 2004/02/03(火) 18:41:45
ダイアログにあります。??

2004/02/03(火) 18:53:45
函数(かんすう、関数) YndSetImage() の引数の型を示してください
そうすれば hBitmap が DDB を指すのか DIB を指すのかおおよその見当がつくと思います

グウ 2004/02/03(火) 18:58:52
hBitmapはDIBでした!

2004/02/03(火) 20:25:11
>hBitmapはDIBでした!

DIB のハンドルの型が HBITMAP でいいのですか?
そうだった場合、どうすべきなのかお分かりですか?

謎の怪鳥 2004/02/03(火) 20:39:22
YndSetImage()APIの概要説明を読むと、
hBitmapを使用してメモリ上から画像データを取得する
と記述されています。

nさんの質問の意図は、
hBitmapを使用して取得するDIB形式のイメージデータは
何処に置いてあるのか、ということですよ。

(1) メモリ上に表示可能な形で設定されている。

(2) 画像ファイルとして保存されている。

(3) アプリケーションのリソースとして保持している。

(1)の場合には、表示するためのビットマップハンドル値を
hBitmapに設定するだけでOKですが、
(2)と(3)の場合には、ファイル or リソースから
「読み込んで」ビットマップハンドルを「生成」し、
hBitmapに設定する必要があります。

で、その画像データはどこにおいてあるのですか?

# 画像がファイルとして保存されているんだったら、
# 最初からYndLoadImage()を使えばいいんじゃないの?

==

グウ 2004/02/03(火) 21:14:15
すみません!これは、
>nさんの質問の意図は、
>hBitmapを使用して取得するDIB形式のイメージデータは
>何処に置いてあるのか、ということですよ。

>(1) メモリ上に表示可能な形で設定されている。

>(2) 画像ファイルとして保存されている。

>(3) アプリケーションのリソースとして保持している。

(1)のメモリ上にあります。
しかし、メモリのデータがYndSetImage()に読み込まれていないみたいなのです。
どうしてなのでしょうか?

グウ 2004/02/03(火) 21:15:23
>DIB のハンドルの型が HBITMAP でいいのですか?
>そうだった場合、どうすべきなのかお分かりですか?

すみません。わかりません・・。

謎の怪鳥 2004/02/03(火) 21:26:19
OCRのAPI概要説明に

YndGetImage : 読み込んである画像をDIBで取得する。

とありますが、これは試してみましたか?

字面を読むと、メモリ上に読み込んだイメージデータを
DIB形式にして、そのハンドルを返してくれるように
見受けられますけど・・・

==

wood 2004/02/04(水) 06:06:35
>謎の怪鳥 2004/02/03(火) 21:26:19
と似たようなことを
>wood 2004/01/28(水) 08:05:39
で書いたんだけど意味分かっていただけなかったみたいですね

YndSetImage()を使用する前に、YndLoadImage()を使って「画像」をロードして
ハンドル(hBitmap)を取得し、そのハンドルをYndSetImage()に渡す
hBitmapに代入して使用しなさいって言ってませんか

>グウ 2004/02/03(火) 21:14:15
>(1)のメモリ上にあります。
これは自分のアプリとしてきちんとハンドル情報を押さえたものとしてありますか
と「謎の怪鳥」さんに聞かれていませんか
>(3) アプリケーションのリソースとして保持している。
こっちが重要だと思いますけど
つまり自分の視覚上(ディスプレイ表示上)あれば良い
(自分のアプリの範囲外であっても)と言う意味ではありませんよ

だから想像ですけど
--------------------------------------------------------------
HBITMAP hBitmap;

hBitmap = YndLoadImage(画像ファイルパスまたはファイルハンドル); ←ここ
//            または既に自分のアプリとして読み込んである画像の
//            hBitmapハンドル
             
//【 画像メモリの読み込み 】
    if (!YndSetImage(hBitmap,NULL, &wErrorCode)){
        //YndSetImage()の呼びだし
        //hBitmap    : DIBのハンドル
        //NULL        : 進捗表示をOCRSYS.DLLにまかせる
        //&wErrorCode    : エラーコードが返される

-------------------------------------------------------------
のようなことに成るんじゃないですかね?
対で使用する必要が無い説明があれば、皆さんに示したほうが良いよ

PATIO 2004/02/05(木) 11:55:31
話が進んでいるところ横槍になってしまいますけれど、
仕事でやっていて、SDKの購入も正規に行っているのであれば、
購入先に問い合わせるのが一番間違いないし、それが筋でしょう。

こういった掲示板で得られるのは、保証が無い情報なので
結局、グウさん自身が自分で検証して問題ない事を確認する必要が有ります。
購入先であれば、グウさんは顧客になりますから責任を持って返答する義務が
あるはずです。
もっとも、サポート料を他に要求されるパターンも考えられますけれど。
この辺りは、購入先にきちんとご自分で確認をとられて動かれた方がよいと
思います。

回答している人たちはWEB等で得られる情報の範囲では回答できますが、
回答するためにわざわざSDKを購入して確認まではしてくれませんから。
(というか、BBSでそこまで求めるのはおかしいですからねぇ)

古いスレッドには追加発言できません。