我正在尝试在python中进行基本的颜色转换,但是我似乎无法摆脱以下错误。我已经重新安装了python,opencv,并尝试在python 3.4.3(最新版本)和python 2.7(在我的Mac上)中使用。
我使用python的软件包管理器opencv-python安装了opencv。
以下是失败的代码:
.click(function() { console.log('click') });
这是错误消息:
frame = cv2.imread('frames/frame%d.tiff' % count)
frame_HSV= cv2.cvtColor(frame,cv2.COLOR_RGB2HSV)
答案 0 :(得分:13)
发生此错误是因为图像未正确加载。因此,您对上一行cv2.imread
有疑问,我的建议是:
检查图像是否在您指定的路径中
检查count变量是否具有有效数字
答案 1 :(得分:2)
检查您提供的是否为 jpg , png , bmp 文件,并相应地编写扩展名。
答案 2 :(得分:2)
如果从网络摄像头读取帧时有人遇到同样的问题:
只需验证您的网络摄像头是否正在用于其他任务,然后将其关闭。这将解决问题。
当我意识到自己的相机在Google环聊群组中在线时,我花了一些时间解决这个错误。
答案 3 :(得分:2)
如果路径正确且图像名称正确,但仍然出现错误
使用:
from skimage import io
img = io.imread(file_path)
代替:
cv2.imread(file_path)
该函数imread从指定文件加载图像并返回 它。如果无法读取图像(由于缺少文件,权限不正确,不受支持或格式无效),该函数将返回一个空矩阵(Mat :: data == NULL)。
答案 4 :(得分:1)
我也遇到过同样的情况,我的案子是因为路径中的韩国字母...
从文件夹名称中删除韩文字母后,它会起作用。
或放置
[#-*- coding:utf-8 -*-]
(边缘的[ ]
除外)
或第一行中的类似内容,以使python理解韩语或您的语言等。 那么即使在我的情况下,即使有一些韩国人也可以使用。
事实就是如此,似乎关于路径或字母有些问题。 回答的人在说类似的话。希望你们能解决!
答案 5 :(得分:0)
在我的情况下,图像的命名错误。检查图片是否存在,然后尝试
import numpy as np
import cv2
img = cv2.imread('image.png', 0)
cv2.imshow('image', img)
答案 6 :(得分:0)
我遇到了同样的问题,结果发现我的图片名称包含特殊字符(例如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 :(得分:0)
我也一直收到此错误:
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时,这些转义字符将每次都为您服务!由于文件名以“ n”开头,所以我的“坏”照片被转义了。 Python将\n
用作转义字符,而OpenCV找不到该文件!
解决方案:
在Windows python中使用r"...\...\"
的前言文件名,如
cv2.imread(r".\images\news.jpg")
答案 8 :(得分:0)
另一可能导致此问题的原因是文件和目录名称中的“怪异”符号。应从文件和文件夹名称中删除所有变音符号(äöå)和其他(éóâ等)字符。有时由于这些字符,我也遇到了同样的问题。
答案 9 :(得分:0)
就我而言,这是一个权限问题。我必须:
chmod a+wrx
图片然后它起作用了。
答案 10 :(得分:0)
必须请大家看到错误在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文件
答案 11 :(得分:0)
您的代码找不到图形或图形名称,即错误消息。 解决方案:
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('哈哈.jpg')#solution:img=cv2.imread('haha.jpg')
print(img)
答案 12 :(得分:0)
如果有人从网络摄像头读取帧时遇到同样的问题[代码类似于“ frame = cv2.VideoCapture(0)”]并在Jupyter Notebook中工作,则可以尝试:
确保先前尝试的代码尚未运行,然后重新启动Jupyter Notebook内核
单独代码“ frame = cv2.VideoCapture(0)”位于单独的单元格中,位于[先前的代码放在上方的单元格中,下面的代码置于向下的单元格] >
然后在“ frame = cv2.VideoCapture(0)”单元格上方运行所有代码。
然后尝试使用唯一的代码“ frame = cv2.VideoCapture(0)”运行下一个单元格-并且-直到您将继续执行其他单元格-确保-该在此特定单元格 DISAPEAR 的左侧显示ASTERIX ,并显示命令顺序号-仅然后继续
现在您可以尝试执行其余代码,因为您的摄像头输入不再应该为空:-)
结束后,请确保关闭所有程序并重新启动内核,以准备再次运行
答案 13 :(得分:0)
答案 14 :(得分:0)
在读取图像之前在图像名称之前添加广告'./'的解决方案...