VBAで画像のドット位置を探す方法
- エクセルのVBAを使用して、画像上のドット位置を解析する方法について知りたいです。具体的には、(1)画像の取り込み方法、(2)黒色ドットの定義方法、(3)ドットの位置の抽出方法について教えてください。
- エクセルのVBAを使って画像上のドットの位置を解析する方法について教えてください。画像の取り込み方法、黒色ドットの定義方法、ドットの位置の抽出方法について知りたいです。
- エクセルのVBAを使って画像上にあるドットの位置を解析する方法について教えてください。画像の取り込み方法、黒色ドットの定義方法、ドットの位置の抽出方法について詳しく教えてください。
- ベストアンサー
VBAで画像のドット位置を探す。
ビットマップ等の画像上にドットがいくつかあるとします。 このドットの位置を解析したいです。 あくまでこれをエクセルのVBAで実現させたいです。(VBはもっていないため) 私の考える流れは、(1)画像を取り込む。(2)黒色のドットを探す。(3)黒色ドットの位置を取得する。 上記をもとに、具体的に知りたいことを記載します。 (1)画像ファイルをどこにとりこめばよいかを知りたいです。エクセル上?ユーザーフォーム上? (2)ドットを探すにあたり黒色ドットの定義をどのように記述したらよいか知りたいです。 その定義にあう画像領域内のドットを探すことが目的です。 また検索する画像領域の範囲の定義の仕方を知りたいです。 (3)見つかったドットの位置の抽出の仕方を知りたいです。 そもそも、別のアプローチ方法などあればご教授していただきたいです。 ちなみにですが、画像処理についての知識はまったくない素人です。。
- unserious
- お礼率18% (13/69)
- オフィス系ソフト
- 回答数3
- ありがとう数1
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 内容に関してですが、bData(19) bData(23)は何を意味しているのでしょうか? > ヘッダーの解説には、19と23についての記載がありませんでした。 ヘッダの解説をよく見てみてください。 [18]からの4byte(18~21)が画像の幅[ピクセル] [22]からの4byte(22~25)が画像の縦[ピクセル] です。 ですから、本当は4byte分でピクセルサイズを求めるべきなのですが、私のコードは予めお断りしている通り手抜き版なので「そんなに大きな画像は読み込まないだろう」とたかをくくって2byte(18と19、22と23)だけ使ってピクセルサイズを求めています。 どの辺りが手抜きなのか説明するべきでしたね。失礼しました。 BMPは1ピクセルごとに情報が取り出せるので簡単ですが、PNGやJPEGは圧縮されているのでそう簡単にはいきません。 私なら他のアプリでBMPに変換してしまいます(^^;
その他の回答 (2)
- mt2008
- ベストアンサー率52% (885/1701)
あぁ、間違えた。7行目、以下の様に直してください If sPath <> Then Exit Sub ↓ If sPath = "" Then Exit Sub
- mt2008
- ベストアンサー率52% (885/1701)
1.ファイルを取り込むというか、BMPファイルをバイナリファイルとして読み込む事になると思います。 読み込んだバイナリを配列に取り込んでも良いですね。 Open パス名 For Binary As ファイル番号 で開きます。 2.8bit以下のBMPならカラーパレットを参照、24bit以上ならRGBが全て0の物を探すことになるかと思います。 3.通常のBMPはデータが左下から右上に向かって記録されていますので、何番目のデータかと言う情報と、ヘッダ情報の解像度と合わせれば位置がわかります。 参考になりそうなサイトのリンクを貼っておきます。 http://www.kk.iij4u.or.jp/~kondo/bmp/ http://www.umekkii.jp/data/computer/file_format/bitmap.cgi 一応、手抜きのサンプルも…。 無圧縮の24bitBMPにしか対応していません。 黒いドットを見つけるごとにA列に縦位置、B列に横位置を記入していきます。 Sub Sample() Dim bData() As Byte Dim nFn As Integer Dim sPath, nW, nH, nCount, nFind, i, j 'BMPファイル選択 sPath = Application.GetOpenFilename(FileFilter:="ビットマップファイル(*.bmp),*.bmp", FilterIndex:=1, Title:="BMP選択", MultiSelect:=False) If sPath <> "" Then Exit Sub 'BMPを配列に読み込む nFn = FreeFile Open sPath For Binary As #nFn ReDim bData(LOF(nFn)) Get #nFn, , bData Close #nFn If bData(28) <> 24 Then MsgBox ("24bitBMPじゃないので終了") Exit Sub End If nW = bData(18) + 256 * bData(19) '横サイズ nH = bData(22) + 256 * bData(23) '縦サイズ nCount = CLng(bData(10)) 'データオフセット nFind = 1 '4byte調整用 nPlus = 0 If (nW Mod 4) > 0 Then nPlus = 4 - (nW Mod 4) End If For i = 1 To nH For j = 1 To nW nWork = CLng(bData(nCount)) + CLng(bData(nCount + 1)) + CLng(bData(nCount + 2)) nCount = nCount + 3 '黒の時の処理 If nWork = 0 Then Range("A" & nFind) = nH - i + 1 Range("B" & nFind) = j nFind = nFind + 1 End If nCount = nCount + nPlus '横ラインは4の倍数byte Next j Next i MsgBox ("確認終了") End Sub
補足
大変ありがとうございます。 内容を理解するのに少し時間がかかりましたが、とても具体的で助かります。 内容に関してですが、bData(19) bData(23)は何を意味しているのでしょうか? ヘッダーの解説には、19と23についての記載がありませんでした。 ご回答からは、ヘッダーのルールを抑えておけば、いけるように感じましたが、PNGファイルやJPEGも同様の考え方でいけるでしょうか?
関連するQ&A
- Excel VBAで画像解析
Excel VBAで画像解析を行いたいのですが、その際に画像データを画素毎に抽出しなければなりません。bmpなど無圧縮のファイルなら、バイナリで読み込んで何とかなりますが、jpg等はどうにもなりません。 Excel VBAで画像ファイルの画素データを直接読み取る方法はありませんか。 他の開発言語を使ったほうがやりやすいのは承知の上ですが、解析結果も配列で返ってくるので、その後のグラフ化の処理などもExcel上で統合してやりたいのです。 宜しくお願いいたします。
- 締切済み
- オフィス系ソフト
- 二値化画像の白黒ドット数を数える方法。
お世話になります。 現在、画像解析をしておりまして 二値化した画像のドット数を計測したいと思っております。 ImagePro+や、WinRoofなどの画像解析ソフトを使えば簡単に出来ることはわかっています。 今お尋ねしたいのは、 フリーソフトでこのドット数をカウントしてくれるようなものは無いかと言うことです。 例えば、1000pix ×1000pix の画像の中に、白ドット:123500個 黒ドット:876500個 ・・・と言うようなことがしたいです。 ちなみに画像の二値化はPhotoShopCS2で実施しています。 以上、宜しくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- VBAでの画像の二値化について
画像の二値化についての質問です 植被率についてのプログラムを作りたいと思っています そこで画像の解析ソフトを作成したいと思っているのですが、画像の色の閾値を指定して(緑を抽出して)白黒の二値化をするにはどのようにプログラミングをすればよろしいのでしょうか?
- 締切済み
- Visual Basic
- Imagejでのドットの数え方について
添付した画像のような黒の背景に緑色のドットが描画されている画像から、緑色のドットが画像全体で何ドット存在しているのかを知りたいです。 ImageJというソフトでそれができるということまでは調べたのですが、どのようにしてドットを数えさせ、それを表示させるかがわかりませんでした。 ImageJでドットを数えさせてその結果を表示させるにはどのようにすればよいでしょうか。 以上、よろしくお願いします。
- 締切済み
- その他([技術者向] コンピューター)
- EXCELでビットマップ画像を操作できますか?
初心者なのでチョット無謀な質問かも知れませんが、よろしくお願いします。 白地図のようなビットマップ画像があるとします。たとえばある市の集落を線画で描いたようなもの。これにある数値に応じて色を付けようと思っています。 Win付属のペイントで一つ一つ色を付けていけば良いのでしょうが、できれば、エクセルで数値を計算し、その結果で自動的に色が付かないかと思っています。無理でしょうか? たとえば、ビットマップの色を付けたい範囲のある座標と色のコードがエクセルに準備できているとして、自動色塗りはできるのでしょうか。 WINは98、エクセルは2000を使用しています。VBAの知識はほとんど無いに等しいです。(多分VBAを使わないと実現しないと思いますが・・・) 初心者だからできる大胆発言かも知れませんが、大量の色塗りに困惑しているのでどうか助けてください。要領を得ない質問で済みません。よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- VBAで抽出した画像の数枚をフォームに表示
VBAで指定したURLにある画像を抽出し、その画像をExcelシートに貼るものを作りましたが、そのうち3枚くらいをユーザフォーム上にも表示したいのですが、どのように記述したらよいでしょうか? 教えていただけたら幸いです。
- 締切済み
- Excel(エクセル)
- VBAでボタンを押すと指定サイトの画像抽出
お力を貸してください。 エクセルVBAで、テキストボックスとボタンを配置しました。 テキストボックス内にURLを入れてボタンを押すと、指定サイトに表示されている すべての画像を抽出して、エクセルに貼り付けるVBAを作りたいのですが、どのようなソースにすればよいでしょうか? 教えて頂けたら幸いです。 よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- ビットマップの画素(?)数をカウントする
カテ違いかもしれませんが、質問させて頂きます。 ビットマップデータの画像解析(?)について 例えば、モノクロビットマップの 色を測定するようなフリーソフトをご存知ないでしょうか? 白がいくつで、黒がいくつかを自動計算してくれるような イメージです。 宜しく御願いします。
- 締切済み
- その他(品質管理)
- Excel VBAで作成するにあたって、画像上部の元データを
Excel VBAで作成するにあたって、画像上部の元データを 画像下部のように行列位の違いがあるような項目に データを抽出して転記するにはどうしたらよいでしょうか? 手順 ・支店ごとにデータを抽出し、シート名を付ける ・データを転記する VBA初心者で勉強中ですが大変困難です。 どなたか教えてください。よろしくおねがいいたします。
- ベストアンサー
- オフィス系ソフト
- VBAのイベントプロシージャを使って自動的に枠線の色を変えたい。
VBAのイベントプロシージャを使って自動的に枠線の色を変えたい。 エクセル2007。 VBA初心者です。 現在、書籍を購入して1からVBAを勉強中ですが、 どうしても以下のことを早く実現させたいと思ってますので質問させて下さい。 すべて黒色の枠線が引かれた表(A1:C20)があるとします。 このうちC列はリスト(りんご、みかん、メロン)からの入力しかできません。 更にC列のみ条件付き書式が入っていて、メロンを選択した時だけ そのセル内が黒色に塗りつぶされ、且つ文字が白色になる、いわゆる反転状態になります。 そこで、もし例えばC5とC6に「メロン」を入力したら C5もC6も黒色に塗りつぶされることになり、C5とC6の間にあった枠線は元々黒色ですから その線が全く見えなくなってしまいますよね? 私がVBAでやってみたいのは、この時(=黒色セルが2行続けて並んでしまう時)、 自動的にその間にある線の色だけ白色にするというプロシージャです。 また、この条件が成立して一度線の色が白になっても、 白を作らせた「メロン」を削除した時、元の黒色線に戻るようにもさせたいのですが これは、条件が消えれば自動的に戻るのでしょうか? 自力で調べた限り、Worksheet Changeを使って If~thenで作るのが一番近いのかなと思っていますが いかんせんまだまだ勉強不足であり、どうにも上手く実現できません。 これを実現するサンプルコードをできるだけ簡単に示していただけたら幸いです。 よろしくお願いします。
- ベストアンサー
- その他MS Office製品
お礼
本当にありがとうございます。 まさかできないだろうと思ったことでしたので、ちょっと面白そうです。 しばらく参照しながら頑張ってみます。