画像変化検出

解決


初心者  2007-05-04 22:16:36  No: 136307

まったくの初心者です。よろしくお願いします。
環境はVB6.0 Windows XP です。

1.ディスクトップの一部の画像をキャプチャして
    PictureBoxに表示します。
2.PictureBoxの画像をファイル1に保存します。
3.ディスクトップの一部の画像をキャプチャして
    PictureBoxに表示します。
4.PictureBoxの画像をファイル2に保存します。
5.ファイル1とファイル2を開いてデータを変数
    データ1とデータ2に代入します。
6.データ1とデータ2の内容を比較して画像の変
    化を検知しています。

ただし、処理速度の関係で2.と4.と5.を省略
して画像比較が出来ればいいなあと思っていますが
方法がわかりません。
なにか良い方法があればご指導お願いします。

PictureBoxの内容をデータとしてTypeに展開できれ
ば可能なのかなあとも思っていますが・・・・。
その具体的な方法もわかりません。


てん  2007-05-05 03:38:29  No: 136308

PictureBoxの画像のデータを2次元配列に高速に抽出する方法はここにのっています。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200704/07040044.txt


初心者  2007-05-05 04:04:24  No: 136309

てん様ありがとうございます。

早速回答いただきほんとうにありがとうございました。
内容については、かなり時間をかけて理解する必要が
ありそうなので、とりあえず御礼だけでも申し上げな
くてはと、返信いたしました。

要は、参考のリンクの最終レスですよね。
がんばってやってみます。かならずご報告いたします
のでまずは御礼まで。


初心者  2007-05-05 22:14:00  No: 136310

ご指導いただきました方法が、なかなか自分の物になら
ず苦戦しておりましたところ、

Me.Picture1.Point(x, y)

という便利なものを見つけました。

ScaleModeをピクセルに設定していなかったのでx,y の値
でちょっと苦労しましたが、PictureBoxの指定した場所
の色変化は、完全に捉えることができました。

但しご指導いただいた方法と
For i = 0 to xxxx
   For ii = 0 to yyy
       TARGET = Me.Picture1.Point(i, ii)

       '前回との比較処理
       If OLD_TARGET(i,ii) <> TARGET Then
               Call 変化検出時の処理
       Else
               OLD_TARGET(i,ii) = TARGET
       End if
   Next ii
Next i
の速度の違いはこれから検証してみます。
検証結果で大きな違いがでれば、またご指導い
ただいた方法に挑戦したいと思います。
       
ご指導ありがとうございました。


初心者  2007-05-07 04:16:14  No: 136311

ご指導いただいた方法がベストでありました。
配列に代入されてひとつずつを調べるためにForでまわしますが

ご指導いただいた処理で、pixel(x,y)に代入される。
その後、各ピクセルを調べる

For i = 0 to xxxx
   For ii = 0 to yyy
       TARGET = pixel(i, ii)

       '前回との比較処理
       If OLD_TARGET(i,ii) <> TARGET Then
               Call 変化検出時の処理
       Else
               OLD_TARGET(i,ii) = TARGET
       End if
   Next ii
Next i

まったくの初心者で、本当に申し訳ありませんが、
xxxとyyyがいくつに設定してよいかわかりません。

1次元配列の場合Ubound(pixel)などで配列の要素数が
わかるのですが、2次元での方法がわかりません、

何卒よろしくお願いいたします。


初心者  2007-05-07 04:21:23  No: 136312

見逃していました。
'配列の宣言
ReDim pixel(Picture1.ScaleWidth - 1, Picture1.ScaleHeight - 1) As Long

ですね。

xxx = Picture1.ScaleWidth
yyy = Picture1.ScaleHeight

解決とさせていただきます。
ありがとうございました。


初心者  2007-05-07 04:23:12  No: 136313

解決チェック忘れてました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加