利用随机剪裁可进行图像数据库的扩大,不同的剪裁位置能够提供更多的数据样本。
发现并不能运行,并报错:
... width,height,depth= img.shape AttributeError: 'NoneType' object has no attribute 'shape'并发现img.shape不存在,通过网上查阅资料得知:读入图片时需要添加路径,否则返回值为None,于是进一步修改代码有:
import cv2 import random img=cv2.imread("d:/testdata/wyb1.jpg") width,height,depth= img.shape img_width_box=width*0.2 img_height_box=height*0.2 for i in range(9): start_pointX=random.uniform(0,img_width_box) start_pointY=random.uniform(0,img_height_box) copyImg=img[start_pointX:200,start_pointY:200] cv2.imshow("test",copyImg) cv2.waitKey(0)运行时出现如下错误:
... copyImg=img[start_pointX:200,start_pointY:200] TypeError: slice indices must be integers or None or have an __index__ method通过监测变量值发现,问题出现在这两句话:
start_pointX=random.uniform(0,img_width_box) start_pointY=random.uniform(0,img_height_box)只要将其改为
start_pointX=int(random.uniform(0,img_width_box)) start_pointY=int(random.uniform(0,img_height_box))即可成功编译,究其原因,由于生成随机为浮点数,进行类型转换为int类型即可成功运行。
编程思路
为了更好的在一定范围内进行截取,增加右下角区域,用于一定范围内的图像截取,相关参数可根据需要自行修改。
import cv2 import random img=cv2.imread("d:/testdata/wyb1.jpg") print (img.shape) width,height,depth= img.shape img_width_box_up=width*0.2 img_height_box_up=height*0.2 img_width_box_down=width*0.8 img_height_box_down=height*0.8 print(img_width_box_up) print(img_height_box_up) for i in range(9): start_pointX=int(random.uniform(0,img_width_box_up)) start_pointY=int(random.uniform(0,img_height_box_up)) end_pointX=int(random.uniform(img_width_box_down,width)) end_pointY=int(random.uniform(img_height_box_down,height)) print(start_pointX) print(start_pointY) copyImg=img[start_pointX:end_pointX,start_pointY:end_pointY] cv2.imshow("test",copyImg) print(copyImg.shape) cv2.waitKey(0)