我正在使用TensorFlow和Python进行图像分类,但是使用CV2读取图像时出现错误。我是CV2的新手,但是我找不到能够解决我的问题的任何东西。谁能解释如何解决这个问题?
def train_data_with_label():
train_images = []
for i in tqdm(os.listdir(train_data)):
path = os.path.join(train_data, i)
img = cv2.imread(path, 3)
img = cv2.resize(img, (64,64))
train_images.append([np.array(img), one_hot_label(i)])
shuffle(train_images)
return train_images
def test_data_with_label():
test_images = []
for i in tqdm(os.listdir(test_data)):
path = os.path.join(test_data, i)
img = cv2.imread(path, 3)
img = cv2.resize(img, (64,64))
test_images.append([np.array(img), one_hot_label(i)])
shuffle(test_images)
return test_images
这是我得到的错误:
Using TensorFlow backend.
0%| | 0/2 [00:00<?, ?it/s]
Traceback (most recent call last):
File "retrain.py", line 47, in <module>
training_images = train_data_with_label()
File "retrain.py", line 32, in train_data_with_label
img = cv2.resize(img, (64,64))
cv2.error: OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp:3720: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
答案 0 :(得分:2)
检查要在for循环中尝试迭代的文件夹中是否有 _DS_Store 文件,因为它不是图像文件cv2.resize()无法调整其大小。
答案 1 :(得分:0)
您可能正在读取无效的零像素图像。由于源图像的大小很可能是空的并且没有被正确读取,因此请检查图像路径。您可以检查图像的形状以确保其具有有效的(height, width, channels)
尺寸
image = cv2.imread('noexist.png')
print(image.shape)
如果您收到与此类似的AttributeError
错误,则表明您的图片路径无效/损坏。
Traceback (most recent call last):
File ".\test.py", line 4, in <module>
print(image.shape)
AttributeError: 'NoneType' object has no attribute 'shape'
在尝试使用此NoneType
对象执行操作之前,OpenCV不会引发异常。因此,在下一行中,当您尝试调整图像大小时,它将引发错误。这个简单的例子可以重现您的情况
import cv2
image = cv2.imread('noexist.jpg')
resize = cv2.resize(image, (64,64))
cv2.waitKey()
请注意,如果删除cv2.resize()
,将不会引发异常。要解决您的问题,您可以使用cv2.error
和try/except
块来捕获异常
import cv2
image = cv2.imread('noexist.jpg')
try:
resize = cv2.resize(image, (64,64))
except cv2.error as e:
print('Invalid frame!')
cv2.waitKey()
无效的帧!
答案 2 :(得分:0)
基于该错误,似乎输入中存在一些问题。它应该是非空数组的列表。请验证路径和图像是否有损坏的图像。另外,检查图像格式;如果存在任何cv2.imread无法读取的多波段tiff文件。
尝试分批读取图像,以识别具有引起问题的图像的批次。
答案 3 :(得分:0)
在读取图像之前,请检查是否存在不存在的图像。在读取图像之前,请尝试以下操作:
if not os.path.isfile(train_data):
continue
path = os.path.join(train_data, i)
img = cv2.imread(path, 3)
答案 4 :(得分:0)
我认为问题在于工作目录。我也收到了同样的错误,并且在我更正工作目录时已解决。下面是我的代码,当从正确的目录运行时,它们可以工作。
def image_2_text(input_path,out_path):
for ImgName in os.listdir(input_path):
fullpath = os.path.join(input_path,ImgName)
Img = cv2.imread(fullpath)
text = pytesseract.image_to_string(Img,lang='eng')
text = text.replace("\n"," ")
text = " ".join(re.findall("[a-zA-Z]*",text))
file_append = open(out_path,'a+')
file_append.write(ImgName+'\t')
file_append.write(text+'\n')
file_append.close()
print("Process Complete")
答案 5 :(得分:0)
仅当我将多个图像馈送到cv2.resize()时,我才遇到此错误。
resizedNumpyImage = cv2.resize(numpyArrayOfSingleImage,(neWidth,newHeight))
答案 6 :(得分:0)
在终端上更改目录对我有用!
cd C:/ Users ... /图像位置