質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

1697閲覧

python 画像処理について

raspypy

総合スコア247

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2020/03/10 05:06

編集2020/03/17 07:42

##やろうとしていること

赤外センサ(8x8構造)からデータを取得し、画像表示させています。
使用している赤外センサは、AMG8833です。
赤外センサに手をかざすと、手の輪郭が取得したデータ(画像)から分かる。ということをしたいです。

##困っていること
matplotlibとopencvのそれぞれのプログラムを作成し、ほぼ同じ位置で手をかざした画像を作成しましたが、
いずれも手の輪郭が分かりづらいです。
プログラムで何か改善する方法はありますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

bicubic 補完で 8x8 の画像を拡大したとしても、画像がぼやけるだけで、情報量が増えるわけではないです。
手の輪郭を取得するのに 8x8 という解像度では不十分なのではないでしょうか。
例えば、Excel 方眼紙を作成し、8x8 マスの領域に手をドット絵で描けるかどうか試してみると、難しいことがわかると思います。

プログラムで何か改善する方法はありますでしょうか?

プログラムというよりは、赤外線センサーのハードの性能の問題だと思います。

追記

python

1import numpy as np 2import cv2 3import matplotlib.pyplot as plt 4 5 6img = np.array( 7 [ 8 [20.75, 21.25, 22.25, 22.5, 21.25, 21.25, 22.75, 23.25], 9 [20.5, 21.0, 22.25, 22.25, 23.25, 23.25, 24.0, 24.75], 10 [20.0, 21.25, 21.75, 22.0, 22.5, 23.75, 25.5, 25.25], 11 [20.0, 19.75, 20.75, 22.5, 24.25, 24.75, 25.25, 26.0], 12 [20.25, 22.25, 23.25, 24.25, 24.0, 24.5, 25.5, 25.75], 13 [21.0, 20.75, 21.0, 20.75, 21.5, 24.75, 26.0, 23.5], 14 [21.0, 20.0, 20.25, 22.5, 24.0, 24.75, 22.25, 23.75], 15 [21.25, 18.5, 20.5, 22.5, 21.0, 20.5, 20.25, 21.75], 16 ] 17) 18 19# bicubic 補完で 300x300 にリサイズ 20float_img = cv2.resize(img, dsize=(300, 300), interpolation=cv2.INTER_CUBIC) 21 22# 画像として扱えるように float の配列を [0, 255] に minmax scaling する。 23gray = cv2.normalize( 24 float_img, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U 25) 26 27# 大津の手法で2値化する。 28ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) 29print(f"threshold {ret}") 30 31# 結果保存 32cv2.imwrite("result.png", binary)

2値化した結果は以下のようになりました。

イメージ説明

投稿2020/03/10 05:25

編集2020/03/10 06:10
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raspypy

2020/03/10 05:40

回答ありがとうございます。 質問に掲載させていただいている"data"が、行列のデータとなります。 こちらで試していただくことは可能でしょうか。
tiitoi

2020/03/10 06:12

試した結果を追記しました。 情報量は 8x8 しかないので、綺麗に手の輪郭を抽出することは無理ですが、2値化によって一応温度の高い領域とそうでない領域の白黒をつけることはできました。
tiitoi

2020/03/10 08:09 編集

そのサイトや別質問 ( https://teratail.com/questions/246189 ) の画像を見ましたが、手とセンサーの距離によってぼやける場合と比較的くっきり映る場合があるのではないでしょうか。 手を離したり、近づけたり、指先だけにしたりしてみてはどうでしょうか? そのサイトでも3本までは指先が比較的くっきりとれてますが、4本の場合だと質問の画像のようにぼやけてしまっているように思います。
raspypy

2020/03/10 07:56

すみません。別質問のリンク先を確認していただけないでしょうか。 "ページが見つかりません"と表示されてしまいます。
tiitoi

2020/03/10 08:10

リンクを修正しました。raspypy さんの1つ前の質問に貼ってあった画像を見ると、3本の指先なら比較的くっきり写っているように見えます
raspypy

2020/03/10 09:12

ありがとうございます。 距離を変えたりしながら、試してみます。別質問も含めて丁寧に回答いただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問