web-dev-qa-db-ja.com

関数「cvtColor」エラーのOpenCV!_src.empty()

私はpythonで基本的な色変換を行おうとしていますが、以下のエラーを通過できないようです。 python、opencvを再インストールし、python 3.4.3(最新)とpython 2.7(Macにあります)の両方で試しました。

Pythonのパッケージマネージャーopencv-pythonを使用してopencvをインストールしました。

失敗するコードは次のとおりです。

frame = cv2.imread('frames/frame%d.tiff' % count)
frame_HSV= cv2.cvtColor(frame,cv2.COLOR_RGB2HSV)

これはエラーメッセージです。

cv2.error: OpenCV(3.4.3) /Users/travis/build/skvark/opencv-python/opencv/modules/imgproc/src/color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'
13
Charklewis

このエラーは、画像が適切にロードされなかったために発生しました。したがって、前の行に問題がありますcv2.imread私の提案は次のとおりです。

  • 指定したパスに画像が存在するかどうかを確認してください

  • 彼が有効な番号を持っている場合、カウント変数を確認してください

26
shaked litbak

提供しているjpgpngbmpファイルがあるかどうかを確認し、それに応じて拡張機能を記述します。

3
Ramandeep Singh

私も同じ状況にありました。私の場合は、韓国語の手紙が原因でした...

フォルダー名から韓国語の文字を削除すると、機能します。

または置く

[#-*- coding:utf-8 -*-]

(エッジの[ ]を除く)

または、最初の行でpythonに韓国語やあなたの言語などを理解させるようにすると、私の場合は韓国人がパスにいる場合でも動作します。

物事は、パスや手紙について何かがあるように見えます。答えた人は似たようなことを言っています。皆さんがそれを解決することを願っています!

1
sdh4967

私の場合、画像の名前は間違っています。画像が存在するかどうかを確認し、試してください

import numpy as np
import cv2

img = cv2.imread('image.png', 0)
cv2.imshow('image', img)
0
henryoats

私もこのエラーを取得し続けました:

Traceback (most recent call last):
  File "face_detector.py", line 6, in <module>
    gray_img=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor

私のcv2.cvtColor(...)\photo.jpgで正常に機能していましたが、\news.jpgでは機能していませんでした。私にとって、私はついに、Pythonを使用してWindowsで作業しているとき、それらのエスケープ文字が毎回あなたをつかまえることに気付きました!!そのため、ファイル名が「n」で始まるため、「悪い」写真がエスケープされていました。 Pythonはエスケープ文字として\nを使用し、OpenCVはファイルを見つけることができませんでした!

解決:
Windowsのファイル名の前にpythonのようにr"...\...\"を付けます

cv2.imread(r".\images\news.jpg")
0
D Jacobson

私は同じ問題を抱えていたので、私の画像名に特殊文字が含まれていた(例:château.jpg)であり、cv2.imreadで処理できませんでした。私の解決策は、ファイルの一時的なコピーを作成し、名前を変更することでしたtemp.jpgcv2.imreadで問題なくロードできます。

注:shutil.copy2のパフォーマンスを確認しませんでした。他のオプションについても同様です。したがって、おそらく一時コピーを作成するためのより良い/より速いソリューションがあります。

import shutil, sys, os, dlib, glob, cv2

for f in glob.glob(os.path.join(myfolder_path, "*.jpg")):
    shutil.copy2(f, myfolder_path + 'temp.jpg')
    img = cv2.imread(myfolder_path + 'temp.jpg')
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    os.remove(myfolder_path + 'temp.jpg')

特殊文字を含むファイルがわずかしかない場合、名前の変更も例外として実行できます。

for f in glob.glob(os.path.join(myfolder_path, "*.jpg")):
    try:
        img = cv2.imread(f)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    except:
        shutil.copy2(f, myfolder_path + 'temp.jpg')
        img = cv2.imread(myfolder_path + 'temp.jpg')
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        os.remove(myfolder_path + 'temp.jpg')
0
Peter

ウェブカメラからフレームを読み取るときにこの問題が発生する場合:

Webカメラが別のタスクで使用されているかどうかを確認して閉じます。これで問題が解決します。

Googleハングアウトグループでカメラがオンラインになっていることに気付いたとき、このエラーにしばらく時間を費やしました。

0
Leonardo Mariga