imread 返回 None,违反函数“cvtColor”错误中的断言 !_src.empty()

2025-02-27 09:05:00
admin
原创
67
摘要:问题描述:我正在尝试在 python 中进行基本的颜色转换,但似乎无法解决以下错误。我重新安装了 python、opencv,并尝试了 python 3.4.3(最新版本)和 python 2.7(在我的 Mac 上)。我使用 python 的包管理器 opencv-python 安装了 opencv。这是失...

问题描述:

我正在尝试在 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'

解决方案 1:

发生此错误是因为图像未正确加载。所以上一行有问题cv2.imread。我的建议是:

  • 检查图像是否存在于您指定的路径中

  • 检查 count 变量是否具有有效数字

解决方案 2:

如果有人在从网络摄像头读取帧时遇到同样的问题:

检查您的网络摄像头是否正在用于其他任务并将其关闭。这将解决问题。

当我意识到我的摄像头在 Google Hangouts 群组中处于在线状态时,我花了一些时间来解决此错误。此外,请确保您的网络摄像头驱动程序是最新的

解决方案 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:projectsopencv-pythonopencvmodulesimgprocsrccolor.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor

我的cv2.cvtColor(...)可以正常工作,photo.jpg但 不行`
ews.jpg。对我来说,我终于意识到,当在 Windows 上使用 Python 时,那些转义字符每次都会出错!!所以我的“坏”照片因为文件名以“n”开头而被转义。Python 将 视为
`转义字符,OpenCV 找不到该文件!

解决方案:

在 Windows python 中,文件名前面加上r"......"as

cv2.imread(r".images
ews.jpg")

解决方案 4:

检查路径中是否存在图像并验证图像扩展名(.jpg 或 .png)

解决方案 5:

如果路径正确,图像名称正确,但仍然收到错误

使用:

from skimage import io

img = io.imread(file_path)

而不是:

cv2.imread(file_path)

函数 imread 从指定文件加载图像并返回。如果无法读取图像(由于文件丢失、权限不当、格式不受支持或无效),该函数将返回一个空矩阵 ( Mat::data==NULL )。

解决方案 6:

检查您提供的是否是jpgpngbmp文件,并相应地写入扩展名。

解决方案 7:

另一个可能导致此问题的原因是文件和目录名称中存在“奇怪”的符号。应从文件和文件夹名称中删除所有变音符号 (äöå) 和其他 (éóâ 等) 字符。我有时也因为这些字符而遇到同样的问题。

解决方案 8:

在我的例子中,图像命名不正确。检查图像是否存在,然后尝试

import numpy as np
import cv2

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

解决方案 9:

我也遇到过同样的情况,我的情况是因为路径中的韩文字母......

我从文件夹名称中删除韩文字母后,它就可以正常工作了。

或放

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

[ ]边缘除外)

或者在第一行添加类似的内容,让 python 理解韩语或你的语言等等。那么即使路径中有一些韩国人,在我的情况下它也会起作用。

所以事情是这样的,似乎与路径或字母有关。回答的人也说了类似的话。希望你们能解决这个问题!

解决方案 10:

  • 很可能是加载图像时出现错误,请尝试再次检查目录。

  • 打印图像以确认是否实际加载

解决方案 11:

当我尝试从非 ASCII 路径加载图像时,我遇到了问题。如果我仅使用 imread 加载图像,则只能得到 None。

以下是我的解决方案:

import cv2
import numpy as np
path = r'D:map上海地图abc.png'
image = cv2.imdecode(np.fromfile(path, dtype=np.uint8), cv2.IMREAD_UNCHANGED)

当我将图像保存在非 ASCII 路径中时,也会发生类似的事情。没有任何警告,它将无法成功保存。这就是我所做的。

import cv2
import numpy as np
path = r'D:map上海地图abc.png'
cv2.imencode('.png', image)[1].tofile(path) 

解决方案 12:

我在加载数千张图像时遇到了同样的问题。显然,有些文件不是有效图像,但文件扩展名正确。也许是保存过程中出错了?我通过将加载函数包装在 try-catch 块中、打印有问题的文件的名称并继续执行脚本来解决这个问题。

# Process the images
 for image_path in image_paths:
        """
     try-catch block to handle errors in processing individual images.
        """
        try:
            process_image(image_path, pass_folder, reject_folder)
        except cv2.error as e:
            print(f"Error processing image {image_path.name}: {str(e)}")

解决方案 13:

我遇到了同样的问题,结果发现我的图像名称包含特殊字符(例如 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')

解决方案 14:

就我而言,这是权限问题。我必须:

  • chmod a+wrx图片

然后它就起作用了。

解决方案 15:

正如 @shaked litbak 所说,这个错误是在我首次使用 ASCII 生成器时出现的,因为我天真地以为我只需要添加到 ./data 目录,它就会自动加载。

我必须在 --input 选项后附加所需的文件路径。

解决方案 16:

我检查了我的图像文件路径,它是正确的。我确保没有损坏的图像。问题出在我的 Mac 上。它有时会有一个名为.DS_Store的隐藏文件,该文件与图像文件路径一起保存。因此 cv2 遇到了该文件的问题。所以我通过删除.DS_Store解决了这个问题

解决方案 17:

我也遇到了这种类型的错误:

错误:OpenCV(4.1.2) /io/opencv/modules/imgproc/src/color.cpp:182:错误:(-215:断言失败)!_src.empty() 在函数‘cvtColor’中

解决方案是正确加载图像。由于提到的文件有误,图像未加载,因此引发此错误。您可以检查图像的路径,或者如果通过 colab 或 drive 上传图像,请确保图像存在于 drive 中。

解决方案 18:

大家一定要看看错误是否出在 cv2.imread() 中。给出图像的正确路径。首先,看看你的系统是否加载了图像。可以先通过使用 cv2.imread() 简单加载图像来检查这一点。之后,查看此代码进行人脸检测

import numpy as np
import cv2

cascPath = "/Users/mayurgupta/opt/anaconda3/lib/python3.7/site-   packages/cv2/data/haarcascade_frontalface_default.xml"

eyePath = "/Users/mayurgupta/opt/anaconda3/lib/python3.7/site-packages/cv2/data/haarcascade_eye.xml"

smilePath = "/Users/mayurgupta/opt/anaconda3/lib/python3.7/site-packages/cv2/data/haarcascade_smile.xml"

face_cascade = cv2.CascadeClassifier(cascPath)
eye_cascade = cv2.CascadeClassifier(eyePath)
smile_cascade = cv2.CascadeClassifier(smilePath)

img = cv2.imread('WhatsApp Image 2020-04-04 at 8.43.18 PM.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    roi_gray = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]
    eyes = eye_cascade.detectMultiScale(roi_gray)
    for (ex,ey,ew,eh) in eyes:
        cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

这里,cascPath、eyePath、smilePath 应该具有从 lib/python3.7/site-packages/cv2/data 中获取的正确实际路径,此路径应该是用于获取 haarcascade 文件的路径

解决方案 19:

您的代码无法找到图形或错误消息中指定的图形名称。解决方案:

import cv2
import numpy as np 
import matplotlib.pyplot as plt 
img=cv2.imread('哈哈.jpg')#solution:img=cv2.imread('haha.jpg')
print(img)

解决方案 20:

如果有人在从网络摄像头读取帧 [代码类似于“frame = cv2.VideoCapture(0)”] 并在 Jupyter Notebook 中工作时遇到同样的问题,您可以尝试:

  1. 确保先前尝试的代码尚未运行并重新启动 Jupyter Notebook 内核

  2. 代码“frame = cv2.VideoCapture(0)”放在单独的单元格中,放在原来的位置 [先前的代码放在上面的单元格中,下面的代码放在下面的单元格中]

  3. 然后运行单元格上方的所有代码,其中“frame = cv2.VideoCapture(0)”

  4. 然后尝试使用其唯一代码“frame = cv2.VideoCapture(0)”运行下一个单元格 - 并且 - 直到您继续执行其他单元格 -确保-此特定单元格左侧的ASTERIX消失并且出现命令顺序号 - 然后才继续

  5. 现在您可以尝试执行其余代码,因为您的相机输入不再为空:-)

  6. 结束后,确保关闭所有程序并重新启动内核以准备再次运行

解决方案 21:

path = os.path.join(raw_folder, folder, file)
print('[DEBUG] path:', path)

img = cv2.imread(path)   #read path Image 

if img is None: # check if the image exists in the path you give
    print('Wrong path:', path)
else: # It completes the steps
    img = cv2.resize(img, dsize=(128,128))
    pixels.append(img)

解决方案 22:

就我而言,路径不正确

一探究竟

解决方案 23:

解决方案是在读取图像之前在图像名称前添加'./'...

解决方案 24:

尝试在 python Shell 中降级 OpenCV(在 cmd 中)

>>> import cv2
>>> cv2.__version__

在 cmd 中签入后

pip uninstall opencv-python

卸载 opencv 安装版本后

pip install opencv-python==3.4.8.29
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3878  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2714  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   47  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   48  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   48  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用