こんにちは私はOpenCVでRaspberry Piに取り組んでいます。リンクのボールトラッキングであるチュートリアルを試してみたい http://www.pyimagesearch.com/2015/09/14/ball-tracking-with-opencv/
しかし、コンパイルするとエラーが発生します。「NoneType」オブジェクトには属性「形状」がありません。
私は何をすべきか?
これは、画像を返すはずの関数がNoneを返したため、shape属性がないことを意味します。 「imgを印刷」して、画像がNoneであるか、実際のnumpyオブジェクトであるかを確認してください。
今日、同じ問題に直面しました。cybseccryptで言及されているように、画像のパスを確認してください。読影後、画像を印刷してみてください。値を取得した場合は、ファイルが開いていることを意味します。
コード:
img_src = cv2.imread('/home/deepak/python-workout/box2.jpg',0) print img_src
お役に立てれば!
ビデオパスが何らかの方法で間違っている可能性があるため、おそらくエラーが発生します。パスが完全に正しいことを確認してください。
私はこの問題にも遭遇し、デバッグに多くの時間を費やしました。
最初に、指定したパスが有効であること、つまりそのパスに画像があることを確認してください。
次に、Opencvがユニコード文字を含む画像パスをサポートしていないことに注意してください( ref を参照)。画像パスにUnicode文字が含まれている場合は、次のコードを使用して画像を読み取ることができます。
import numpy as np
import cv2
# img is in BGR format if the underlying image is a color image
img = cv2.imdecode(np.fromfile(im_path, dtype=np.uint8), cv2.IMREAD_UNCHANGED)
人工的に作成された画像、つまりそれらを自分で作成し、特定のタスクを実行するようにニューラルネットワークをトレーニングします。それで、これらの画像を作成して保存しましたが、(cv2.imread(...)で)開こうとすると、このエラーが発生しました。人為的に保存- 作成追加する必要がある画像dtype = np.uint8。これで問題は解決しました!
これは、画像のパスが間違っているか、書き込んだ画像の名前が間違っているためです。
確認する方法?最初に「None」と表示される場合は、print(img)を使用して画像を印刷してみてください。これは、間違った画像パスを指定したことを意味し、そのパスを修正して再試行します。
私は同じ問題に出会うだけです。 OpenCVの最新バージョンを更新することで解決します。それは私とうまく動作します。それもあなたと一緒に大丈夫だと思います。
エラーを処理しようとします。これは、OpenCVによって与えられた属性エラーです
try:
img.shape
print("checked for shape".format(img.shape))
except AttributeError:
print("shape not found")
#code to move to next frame
これが同じ問題に直面している人を助けることを願っています
実行中のプログラムは行番号のエラーとしてそれを言及していないので、どこが発生したかを正確に知るため
'NoneType' object has no attribute 'shape'
image/frame
を読み込んだ後、必ずassert
を追加してください
画像について
image = cv2.imread('myimage.png')
assert not isinstance(image,type(None)), 'image not found'
ビデオ用
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
# Capture frame-by-frame
ret, frame = cap.read()
if ret:
assert not isinstance(frame,type(None)), 'frame not found'
長いスクリプトで同様の問題を解決するのに役立ちました