我正在准备一个用于对象检测的数据集,所以我想裁剪数千张图像,下面是我的代码:
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
并行。