
ビットマップ等の画像上にドットがいくつかあるとします。
このドットの位置を解析したいです。
あくまでこれをエクセルの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も見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
あなたの「プチ贅沢」はなんですか?
お仕事や勉強などを頑張った自分へのご褒美としてやっている「プチ贅沢」があったら教えてください。
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
泣きながら食べたご飯の思い出
泣きながら食べたご飯の思い出を教えてください。
-
画像認識アルゴリズムについて
Visual Basic(VBA)
-
エクセルのシートに貼りつけたbmpをjpegに
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10cmって何ピクセルですか?
-
VBの画面サイズについて
-
フォトショップ画像の縦横比率...
-
画像のピクセル、KB、データ量...
-
500ピクセルって何ミリ?
-
フォトショップの画像で、縦横...
-
幅818ピクセル以下にしない...
-
イラストレータでピクセル指定...
-
【イラストレータ、PSD書き出し...
-
フォトショップ 指定したサイ...
-
エクセルからペイントにコピペ...
-
フォトショップでサイズ変更す...
-
イラストを依頼したいのですが ...
-
Illustratorで書いた線が出力後...
-
3m角の印刷に必要な画像サイズ
-
エクセル2003の高さ、幅の...
-
同じピクセル数の画像なのにパ...
-
パス上のポイント座標の取得
-
aviutlでクリッピング&リサイ...
-
教えていただければと思います ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10cmって何ピクセルですか?
-
画像のピクセル、KB、データ量...
-
500ピクセルって何ミリ?
-
フォトショップ画像の縦横比率...
-
VBの画面サイズについて
-
フォトショップの画像で、縦横...
-
フォトショップ 指定したサイ...
-
エクセルで拡大縮小せずA4め...
-
Illustratorで書いた線が出力後...
-
イラストレータでピクセル指定...
-
同じピクセル数の画像なのにパ...
-
写真について 縦4cm×横3cmって...
-
エクセルのピクセルは何センチ?
-
イラストレータでWeb用保存する...
-
240×320ピクセルにするには
-
画像のピクセルの縮小による解...
-
JPEGの容量が大きくなる原因は...
-
フォトショップでサイズ変更す...
-
4cmの画像をパソコンで作成した...
-
通常撮った写真を、証明写真く...
おすすめ情報