OpenCV! _Src.empty() в функции 'cvtColor'
Я пытаюсь сделать базовое преобразование цвета в python, но, похоже, не могу пройти мимо ошибки ниже. Я переустановил python, opencv и попробовал как на python 3.4.3 (последний), так и на python 2.7 (который находится на моем Mac).
Я установил opencv, используя python package manager opencv-python.
Вот код, который терпит неудачу:
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'
Ответы
Ответ 1
Эта ошибка произошла из-за неправильной загрузки изображения. Итак, у вас есть проблема с предыдущей строкой cv2.imread
мое предложение:
-
проверьте, существуют ли изображения в указанном вами пути
-
проверьте переменную count, если у него есть действительный номер
Ответ 2
Проверьте, что это за файл jpg, png, bmp, который вы предоставляете, и напишите расширение соответствующим образом.
Ответ 3
Я продолжал получать эту ошибку тоже:
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
. Что касается меня, я наконец-то понял, что при работе на Windows с python эти escape-символы будут получать вас каждый раз! Таким образом, моя "плохая" фотография сбежала из-за имени файла, начинающегося с "n". Python принял символ \n
как escape-символ, и OpenCV не смог найти файл!
Решение:
Предисловие имен файлов в Python Windows с r"...\...\"
как в
cv2.imread(r".\images\news.jpg")
Ответ 4
Я был в той же ситуации, и мой случай был из-за корейского письма в пути...
После удаления корейских букв из имени папки все работает.
ИЛИ положить
[#-*- coding:utf-8 -*-]
(кроме [ ]
на краю)
или что-то подобное в первой строке, чтобы Python понимал корейский язык или ваш язык, и т.д.
тогда это сработает, даже если в моем случае на пути будут корейцы.
Так что, похоже, что есть что-то о пути или букве.
Люди, которые ответили, говорят похожие вещи. Надеюсь, вы, ребята, решите это!
Ответ 5
В моем случае изображение было названо неправильно. Проверьте, существует ли изображение и попробуйте
import numpy as np
import cv2
img = cv2.imread('image.png', 0)
cv2.imshow('image', img)
Ответ 6
У меня была такая же проблема, и оказалось, что в именах моих изображений были специальные символы (например, château.jpg), которые нельзя было обработать с помощью cv2.imread
. Мое решение состояло в том, чтобы сделать временную копию файла, переименовав его, например, в temp.jpg, который может быть загружен cv2.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')
Ответ 7
Если у кого-то возникла такая же проблема при чтении кадра с веб-камеры:
Просто убедитесь, что ваша веб-камера используется для другой задачи, и закройте ее. Это решит проблему.
Я провел некоторое время с этой ошибкой, когда понял, что моя камера была в сети в группе видеовстреч Google.
Ответ 8
Еще одна вещь, которая может быть причиной этого, - "странный" символ в именах файлов и каталогов. Все символы умлаут (символы) и другие символы (и т.д.) Должны быть удалены из имен файлов и папок. У меня была такая же проблема иногда из-за этих персонажей.