🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

934閲覧

im2 = cv2.threshold(gray,140,255,cv2.THRESH_BINARY_INV)[1]の[1]の意味は?

BASEBALL-Y

総合スコア67

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/01/02 14:11

#画像を二値化
im2 = cv2.threshold(gray,140,255,cv2.THRESH_BINARY_INV)[1]の[1]が何を表しているのかを知りたいです。

thresholdが画像の二値化を表していることは理解しています。

#画像のサイズを求める

あと、以下の書籍の同ページの

h,w = img.shape[:2]

の[:2]が何を表しているのかということも教えて頂けると幸いです。

お手数をお掛けしますが、回答宜しくお願い致します。

ちなみに、以下の書籍を参考にしています。(157ページ1行目と7行目)
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

【2つ目の質問について】

h,w = img.shape[:2]

hは「高さ(height)」、wは「幅(witdh)」かと思われます。
前後の文脈が不明ですが通常はimgは「縦ピクセル数、横ピクセル数、チャンネル数」の配列かと思いますので、img.shape[:2]は縦ピクセル数、横ピクセル数となるはずです。

【追記:1つ目の質問について】
OpenCV-Python Tutorials 1 documentation

cv2.threshold は二つの出力を返します.一つ目の出力 retval については後述します.二つ目の出力がしきい値処理された後の 二値画像 になります.

[1]で2つ目の出力である二値画像を取得しているのではないでしょうか。

投稿2020/01/02 14:32

編集2020/01/02 14:38
meg_

総合スコア10739

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

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

BASEBALL-Y

2020/01/02 14:34

ちなみに,コードは以下の通りです. ###はがきから郵便番号の領域を抽出する### import cv2#画像を使うときのライブラリ import matplotlib.pyplot as plt#画像の数値データを表として表示する #ハガキ画像から郵便番号領域を抽出する関数 def detect_zipno(fname): #画像を読み込む img = cv2.imread(fname) #画像のサイズを求める h,w = img.shape[:2] #ハガキ画像の右上のみ抽出する img = img[0:h//2,w//3:] #画像を二値化 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur(gray,(3,3),0) im2 = cv2.threshold(gray,140,255,cv2.THRESH_BINARY_INV)[1] #輪郭を抽出 cnts = cv2.findContours(im2,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)[1] #抽出した輪郭を単純なリストに変換 result = []#resultというリストを作成 for pt in cnts: x,y,w,h = cv2.boundingRect(pt) #大きすぎる小さすぎる領域を除去 if not(50<w<70):continue result.append([x,y,w,h]) #抽出した輪郭が左側から並ぶようにソート result = sorted(result,key=lambda x: x[0]) #抽出した輪郭が近すぎるものを除去 result2 = [] lastx = -100 for x,y,w,h in result: if(x-lastx)<10:continue result2.append([x,y,w,h]) lastx = x #緑色の枠を描写 for x,y,w,h in result2: cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3) return result2,img if __name__ == "__main__": #ハガキ画像を指定して領域を抽出 cnts,img = detect_zipno("hagaki1.png") #画面に抽出結果を描写 plt.imshow(cv2.cvtColor(img,cv2.COLOR_BGR2RGB)) plt.savefig("detect-zip.png",dpi=200) plt.show()
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問