为什么我使用OpenCV裁剪多个图像并将其保存到文件夹的代码不起作用



我正在准备一个用于对象检测的数据集,所以我想裁剪数千张图像,下面是我的代码:

for i in os.listdir('diri'):
if not (i.endswith('.png') or i.endswith('.jpg')):
continue
img= cv2.imread(i)
crop= img[240:400,0:480]
cv2.imwrite('Cropped/{0}'.format(i),crop)

这会产生以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-13-a53199d54e32> in <module>
4         continue
5     img= cv2.imread(i)
----> 6     crop= img[240:400,0:480]
7     cv2.imwrite('Cropped/{0}'.format(i),crop)
TypeError: 'NoneType' object is not subscriptable

但是,当我拍摄相同的图像并在循环外执行操作时,它是有效的,所以我不知道图像是如何返回为None的。

我还尝试了另一种方法如下:

import glob
images = [cv2.imread(file) for file in glob.glob("./diri/*.jpg")]
for i in images:
crop= i[240:400,0:480]
cv2.imwrite('Cropped/{0}.jpg'.format(i),crop)

执行上述操作时没有任何错误,但o/p文件夹中没有裁剪的图像。

如有任何帮助,我们将不胜感激。非常感谢。

您只是将图像名称传递给cv2.imread(i)。由于图像被放置在文件夹CCD_ 2。因此,您会得到NoneType错误。

将代码更改为:

imgpath = os.path.join("diri", i)

cv2.imread(imgpath)

对于第二种方法,请确保Cropped目录与diri并行。

最新更新