ビットマップ等の画像上にドットがいくつかあるとします。
このドットの位置を解析したいです。
あくまでこれをエクセルのVBAで実現させたいです。(VBはもっていないため)
私の考える流れは、(1)画像を取り込む。(2)黒色のドットを探す。(3)黒色ドットの位置を取得する。
上記をもとに、具体的に知りたいことを記載します。
(1)画像ファイルをどこにとりこめばよいかを知りたいです。エクセル上?ユーザーフォーム上?
(2)ドットを探すにあたり黒色ドットの定義をどのように記述したらよいか知りたいです。
その定義にあう画像領域内のドットを探すことが目的です。
また検索する画像領域の範囲の定義の仕方を知りたいです。
(3)見つかったドットの位置の抽出の仕方を知りたいです。
そもそも、別のアプローチ方法などあればご教授していただきたいです。
ちなみにですが、画像処理についての知識はまったくない素人です。。
No.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に変換してしまいます(^^;
本当にありがとうございます。
まさかできないだろうと思ったことでしたので、ちょっと面白そうです。
しばらく参照しながら頑張ってみます。
No.2
- 回答日時:
あぁ、間違えた。
7行目、以下の様に直してくださいIf sPath <> Then Exit Sub
↓
If sPath = "" Then Exit Sub
No.1
- 回答日時:
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/ …
一応、手抜きのサンプルも…。
無圧縮の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が見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
最近、いつ泣きましたか?
泣いてストレス発散! なんて言いますよね。 あなたは最近いつ、どんなシチュエーションで泣きましたか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
メモのコツを教えてください!
メモを取るのが苦手です。 急いでメモすると内容がごちゃごちゃになってしまったり、ひどいときには全く読めない時もあります。
-
【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
【お題】 ・買ったばかりの自転車を分解してひと言
-
架空の映画のネタバレレビュー
映画のCMを見ていると、やたら感動している人が興奮で感想を話していますよね。 思わずストーリーが気になってしまう架空の感動レビューを教えて下さい!
-
画像認識アルゴリズムについて
Visual Basic(VBA)
-
VBA内でのGetPixelを使用した時のRGB値取得の方法
その他(プログラミング・Web制作)
-
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
-
4
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10cmって何ピクセルですか?
-
画像のピクセル、KB、データ量...
-
フォトショップの画像で、縦横...
-
500ピクセルって何ミリ?
-
フォトショップ 指定したサイ...
-
VBの画面サイズについて
-
ピクセル縦横比
-
イラストレータでピクセル指定...
-
エクセルからペイントにコピペ...
-
相互リンク用のバナーサイズ
-
文字の輪郭のギザギザを修正す...
-
イラストを依頼したいのですが ...
-
1ピクセルって何センチ?
-
フォトショップ画像の縦横比率...
-
エクセルで拡大縮小せずA4め...
-
aviutlでクリッピング&リサイ...
-
エクセルの、ピクセルと mm の...
-
4cmの画像をパソコンで作成した...
-
600ピクセル×600ピクセル...
-
VBAで画像のドット位置を探す。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10cmって何ピクセルですか?
-
画像のピクセル、KB、データ量...
-
500ピクセルって何ミリ?
-
フォトショップ画像の縦横比率...
-
VBの画面サイズについて
-
フォトショップ 指定したサイ...
-
エクセルのピクセルは何センチ?
-
フォトショップの画像で、縦横...
-
1ピクセルって何センチ?
-
イラストレータでピクセル指定...
-
エクセルからペイントにコピペ...
-
JPEGの容量が大きくなる原因は...
-
エクセルで拡大縮小せずA4め...
-
画像のピクセルの縮小による解...
-
写真について 縦4cm×横3cmって...
-
4cmの画像をパソコンで作成した...
-
3m角の印刷に必要な画像サイズ
-
Wiiの解像度は横720×縦480だそ...
-
フォトショップでサイズ変更す...
-
スーパーマリオの実寸サイズ
おすすめ情報