
ビットマップ等の画像上にドットがいくつかあるとします。
このドットの位置を解析したいです。
あくまでこれをエクセルの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で質問しましょう!
似たような質問が見つかりました
- その他(ソフトウェア) 画像の拡大率を固定したまま次の画像を表示出来るビューアを探しています 2 2022/05/13 17:19
- 数学 テンソルの添字の位置に現れるドット記号 1 2022/08/12 10:05
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- モニター・ディスプレイ PCモニター解像度について 3 2022/05/08 17:45
- HTML・CSS svgクリップパスの応用コーディング方法 2 2022/04/09 09:07
- その他(教育・科学・学問) 技術のテストの問題です。やり方を教えてください! 間1.7バイトは何ビットか。 間2.5ビットで表現 4 2023/02/27 00:09
- 情報・ワイドショー NHKチコちゃん放送の「バーコードと比較して、QRコードはなぜ情報量が多いのか?」の解説お願いします 5 2022/06/18 13:48
- その他(パソコン・周辺機器) 富士通:サブスクPCはなぜ炎上したか? ってどう思いますか? 6 2022/04/23 17:43
- その他(プログラミング・Web制作) Kotlinの、「, ”カンマ”」「."ドット"」「: コロン」の使い分けについて知りたい 1 2022/11/19 15:37
- レトロゲーム ゲームタイトルが思い出せません 1 2023/05/21 11:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10cmって何ピクセルですか?
-
エクセルで拡大縮小せずA4め...
-
フォトショップ画像の縦横比率...
-
3m角の印刷に必要な画像サイズ
-
Illustrator 1pxの線を書くと...
-
オブジェクトの移動や拡大縮小...
-
エクセルの行の高さ
-
縮小専用。の使い方を教えてく...
-
ピクセルは同じなのにdpiが違う...
-
A3のサイズに必要な写真のデー...
-
フォトショップ 指定したサイ...
-
Adobe premiere proの編集途中...
-
Illustratorで線がぼやける
-
解像度とサイズ
-
イラストレーターファイルをbmp...
-
スキャナーの読み取り解像度と...
-
相互リンク用のバナーサイズ
-
DVDとテレビのアスペクト比につ...
-
スーパーマリオの実寸サイズ
-
VBの画面サイズについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10cmって何ピクセルですか?
-
フォトショップ画像の縦横比率...
-
画像のピクセル、KB、データ量...
-
フォトショップの画像で、縦横...
-
VBの画面サイズについて
-
エクセルで拡大縮小せずA4め...
-
フォトショップ 指定したサイ...
-
エクセルのピクセルは何センチ?
-
500ピクセルって何ミリ?
-
エクセルでセルの幅や高さを数...
-
Illustratorで書いた線が出力後...
-
イラストレータでピクセル指定...
-
Photoshop使用時にPDFへ保存す...
-
スーパーマリオの実寸サイズ
-
画像のピクセルの縮小による解...
-
イラストレーターファイルをbmp...
-
エクセル2003の高さ、幅の...
-
A3のサイズに必要な写真のデー...
-
エクセルからペイントにコピペ...
-
JPEGの容量が大きくなる原因は...
おすすめ情報