Python OpenCV_函数';cvtColor';错误
我试图用python做一个基本的颜色转换,但是我似乎无法克服下面的错误。我重新安装了python、opencv,并在Python3.4.3(最新版本)和Python2.7(在我的Mac上)上进行了尝试 我使用python的包管理器opencv python安装了opencv 以下是失败的代码: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) 这是
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)
检查是否是您提供的jpg,png,bmp文件,并相应地编写扩展名。我也遇到了同样的问题,结果是我的图像名称包含特殊字符(例如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笔记本电脑中工作时遇到同样的问题,您可以尝试:
- 很可能是加载映像时出错,请再次尝试检查目录
- 打印图像以确认是否已实际加载
%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)