我已经下载了一个深度学习项目的数据集,其中包含图像(.png)和每个图像的对应标签(.txt)。我在列表x
中拥有所有图像的路径。我想遍历这些路径,使用cv2
预处理图像,然后将新图像附加到新列表images_data
中。但是,每次尝试遍历它时,我都会不断遇到相同的错误:cv2.error: OpenCV(4.1.1) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'
即使我注释掉引发错误的那行代码,在尝试调整图像大小时也会遇到另一个错误。
这是我用来遍历列表的for循环:
images_data = []
for file in x:
img = cv2.imread(file)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = cv2.resize(img, (80, 80))
images_data.append(img)
我的x
列表看起来像这样:
x = [car1.png, car2.png, car3.png, car4.png, car5.png]
如何解决此错误?
答案 0 :(得分:1)
该错误表明您的img
变量为空,因此cv2.imread(file)
没有读取图像。您可以在读取图像之后,转换颜色或调整大小之前进行检查,使用一个简单的if情况:
if img is None:
print('Error reading image')
else:
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
或使用os
模块检查文件是否存在:
img = cv2.imread(file)
if os.path.isfile(file):
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
如果文件存在, os.path.isfile(file)将返回True
。
我假设您的文件car1.png, car2.png
等位于此脚本的不同文件夹中,并且不在同一路径中,在这种情况下,您需要将图像目录附加到文件名后才能读取它。因此,例如,如果您的图像位于'/home/Deep_Learning/Car_Images/'
中,那么在读取图像时,变量file
必须包含字符串/home/Deep_Learning/Car_Images/car1.png
,用于第一个图像,而不仅仅是{ {1}}。您可以像这样使用python的car1.png
模块来做到这一点:
os