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

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

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

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

Python

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

Q&A

2回答

1967閲覧

'NoneType' object is not subscriptableのエラーについて

CHO-883

総合スコア2

OpenCV

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

Python

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

0グッド

0クリップ

投稿2021/06/24 07:39

編集2021/06/24 07:39

前提・実現したいこと

テンプレートマッチングのプログラムを作成しています.44行目で以下のようなエラーが発生してしまい対処法が分からず困っています.
おそらく初歩的なことなのかと思いますが,わかる方いらっしゃいましたらご回答宜しくお願い致します.

発生している問題・エラーメッセージ

TypeError: 'NoneType' object is not subscriptable

import sys import cv2 import numpy as np #参照画像大きさ h=3072 w=4608 c=3 #X方向変位量の測定画像の箱 xg_img=np.empty((h,w,3)) #Y方向変位量の測定画像の箱 yg_img=np.empty((h,w,3)) #参照画像の縦分割数 a=32#縦分割数 b=32#横分割数 #追加領域の幅 k=20#縦追加領域 v=20#横追加領域 #座標指定(画像)と参照箱の指定 ref_box=np.empty((int(h/a),int(w/b),3)) mea_box=np.empty((int(h/a+2*k),int(w/b+2*v),3)) dx_box=np.empty((int(a),int(b))) dy_box=np.empty((int(a),int(b))) imref=cv2.imread('DSC_0091.JPG') immea=cv2.imread('DSC_0092.JPG') cy=0 for refY in range (int(h/(2*a)),int(h-(h/(2*a))),int(h/a)): cx=0 for refX in range (int(w/(2*b)),int(w-(w/(2*b))),int(w/b)): # z=(refX,refY) ref_box=imref[int(refY-(h/(2*a))):int(refY+(h/(2*a))),int(refX-(w/(2*b))):int(refX+(w/(2*b)))] y_min = int(refY-(h/(2*a))-v) y_max = int(refY+(h/(2*a))+v) x_min = int(refX-(w/(2*b))-k) x_max = int(refX+(w/(2*b))+k) if y_min < 0: y_min = 0 if y_max > h: y_max = h if x_min < 0: x_min = 0 if x_max > w: x_max = w mea_box=immea[y_min:y_max, x_min:x_max] sokan=cv2.matchTemplate(mea_box,ref_box,cv2.TM_CCOEFF_NORMED) #[-1,1]を[0,1]へ cv2.normalize(sokan,sokan,0,1,cv2.NORM_MINMAX) #相互相関係数の最小値・最大値とその座標を抽出 #相関係数の最大値座標の検出 minVal, maxVal, minLoc, maxLoc=cv2.minMaxLoc(sokan) #検出領域中心座標(mea_boxの左上が(0,0)となる)-----⓵ # detect=(pMax[0]+refX,pMax[1]+refY) afterx=maxLoc[0]+refX aftery=maxLoc[1]+refY #変位量 dx=afterx-refX dy=aftery-refY dx_box[cy,cx]=dx dy_box[cy,cx]=dy cx=cx+1 cy=cy+1 cv2.imwrite('dx.tif',dx_box) cv2.imwrite('dy.tif',dy_box) ```python

試したこと

int関数を付けて型を統一しようと試みました.

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答2

0

cv2.imreadは画像がない場合にエラーを出さずにNoneを返します。

おそらく

immea=cv2.imread('DSC_0092.JPG')

で画像が存在しないためimmeaにNopneが入り、

mea_box=immea[y_min:y_max, x_min:x_max]

でこのエラーがでているのでしょう。

immeaがNoneであるなら、フォルダに'DSC_0092.JPG'があるかを確認してください。

投稿2021/06/24 09:15

ppaul

総合スコア24670

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

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

0

44行目ってのがどれかわかりませんが、そこに出てくる変数で、Noneのものがあるためにそのエラーが出てます。
片っ端から変数のナカミが何かをチェックしてみよう

投稿2021/06/24 08:37

y_waiwai

総合スコア88042

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

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

CHO-883

2021/06/24 22:52

失礼しました.エラーが出ているのは
CHO-883

2021/06/24 22:52

ref_box=imref[int(refY-(h/(2*a))):int(refY+(h/(2*a))),int(refX-(w/(2*b))):int(refX+(w/(2*b)))]の部分です.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問