ビットマップ等の画像上にドットがいくつかあるとします。
このドットの位置を解析したいです。
あくまでこれをエクセルの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も見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
自分のセンスや笑いの好みに影響を受けた作品を教えて
子どもの頃に読んだ漫画などが その後の笑いの好みや自分自身のユーモアのセンスに影響することがあると思いますが、 「この作品に影響受けてるな~!」というものがあれば教えてください。
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
画像認識アルゴリズムについて
Visual Basic(VBA)
-
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
-
4
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
500ピクセルって何ミリ?
-
10cmって何ピクセルですか?
-
エクセルで拡大縮小せずA4め...
-
画像のピクセル、KB、データ量...
-
イラストレータでWeb用保存する...
-
フォトショップ画像の縦横比率...
-
A4 768*1024px 72dpi サイズ...
-
スーパーマリオの実寸サイズ
-
マンガミーヤ︰ピクセルの比率...
-
エクセルでセルの幅や高さを数...
-
ビットとピクセルの違い
-
エクセルからペイントにコピペ...
-
パス上のポイント座標の取得
-
Wiiの解像度は横720×縦480だそ...
-
フォトショップで画像のピクセ...
-
エクセル2003の高さ、幅の...
-
VBの画面サイズについて
-
フォトショップの画像で、縦横...
-
Googleピクセル6aについて 特定...
-
フォトショップ 指定したサイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10cmって何ピクセルですか?
-
画像のピクセル、KB、データ量...
-
500ピクセルって何ミリ?
-
VBの画面サイズについて
-
フォトショップ 指定したサイ...
-
フォトショップ画像の縦横比率...
-
エクセルで拡大縮小せずA4め...
-
スーパーマリオの実寸サイズ
-
フォトショップの画像で、縦横...
-
エクセルでセルの幅や高さを数...
-
エクセルからペイントにコピペ...
-
画像のピクセルの縮小による解...
-
エクセルのピクセルは何センチ?
-
3m角の印刷に必要な画像サイズ
-
同じピクセル数の画像なのにパ...
-
Photoshop使用時にPDFへ保存す...
-
JPEGの容量が大きくなる原因は...
-
4cmの画像をパソコンで作成した...
-
イラストレータでWeb用保存する...
-
A3の用紙にちょうど印刷できる...
おすすめ情報