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

Еще одна вещь, которая может быть причиной этого, - "странный" символ в именах файлов и каталогов. Все символы умлаут (символы) и другие символы (и т.д.) Должны быть удалены из имен файлов и папок. У меня была такая же проблема иногда из-за этих персонажей.