Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV_函数';cvtColor';错误_Python_Opencv - Fatal编程技术网

Python OpenCV_函数';cvtColor';错误

Python OpenCV_函数';cvtColor';错误,python,opencv,Python,Opencv,我试图用python做一个基本的颜色转换,但是我似乎无法克服下面的错误。我重新安装了python、opencv,并在Python3.4.3(最新版本)和Python2.7(在我的Mac上)上进行了尝试 我使用python的包管理器opencv python安装了opencv 以下是失败的代码: frame = cv2.imread('frames/frame%d.tiff' % count) frame_HSV= cv2.cvtColor(frame,cv2.COLOR_RGB2HSV) 这是

我试图用python做一个基本的颜色转换,但是我似乎无法克服下面的错误。我重新安装了python、opencv,并在Python3.4.3(最新版本)和Python2.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'

发生此错误是因为图像加载不正确。因此,您对前一行有问题。我的建议是:

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

  • 检查计数变量是否有有效的数字


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

import numpy as np
import cv2

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

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

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

我也经常遇到这样的错误:

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

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

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


当我意识到我的相机在谷歌的一个社交网站群中在线时,我花了一些时间处理这个错误。另外,请确保您的网络摄像头驱动程序是最新的

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

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

或者说

[#-*- coding:utf-8 -*-]
(边缘处的
[]
除外)

或者像第一行那样,让python理解韩语或您的语言等等。 那么,即使在我的情况下,有一些韩国人在这条道路上,它也会起作用

所以事情是这样的,似乎有一些关于路径或字母的东西。
回答的人也在说类似的话。希望你们能解决它

另一个可能导致这种情况的原因是文件名和目录名中有一个“奇怪”的符号。应从文件和文件夹名称中删除所有umlaut(äöå)和其他(äó–etc)字符。由于这些字符,我有时会遇到同样的问题。

在我的情况下,这是一个权限问题。我必须:

  • chmoda+wrx

然后它就工作了。

必须请大家确认错误在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文件

使用:

而不是:

cv2.imread(file_path)
函数imread从指定文件加载图像并返回 信息技术如果无法读取图像(因为缺少文件、权限不正确、不支持或格式无效)
,函数将返回一个空矩阵(Mat::data==NULL)


代码找不到按错误消息命名的地物或地物名称。 解决方案:

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

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

  • 确保以前尝试过的代码尚未运行,并重新启动Jupyter笔记本内核

  • 分离将“frame=cv2.VideoCapture(0)”编码在其所在位置的单独单元格中[上一个代码放入上一个单元格,下一个代码放入下一个单元格]

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

  • 然后试着用下一个单元格的唯一代码“frame=cv2.VideoCapture(0)”-运行下一个单元格,直到您继续执行其他单元格-确保ASTERIX在该特定单元格的左侧DISAPEAR并显示命令顺序号-然后继续

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

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

    • 很可能是加载映像时出错,请再次尝试检查目录
    • 打印图像以确认是否已实际加载

    在读取图像之前,在图像名称之前添加“/”的解决方案。

    我猜您的图像标记为01、02等等,而不是1、2,…但这就是您要添加的内容。如果是这样,请输入
    %02d
    (这意味着您需要前导0,数字应为2位)。是的,谢谢,我上面的代码中有一个错误导致图像目录不正确。OMG谢谢。。。我费了好大劲才检查了一下我是否有无法工作的功能,并且没有注意到没有图片。。。hahaCan确认这是我的问题-在将my.gif转换为其中一种格式后,必须确保指定了完整路径,PyteSeract 0.2.6可以工作。特别是在jupyter Ntobook中,如果您使用过一次相机,并且出现此问题,r
    cv2.imread(file_path)
    
    import cv2
    import numpy as np 
    import matplotlib.pyplot as plt 
    img=cv2.imread('哈哈.jpg')#solution:img=cv2.imread('haha.jpg')
    print(img)