解决numpy的cannot set WRITABLE flag to True of this array的问题

最近使用pdf2image将PDF转换为图片时,使用如下代码:

pil_images = pdf2image.convert_from_path(pdf_path, dpi)

images = []
for pil_img in pil_images:
    img = np.asarray(pil_img)
    try:
        img.setflags(write=1)
    except Exception as e:
        logger.warn(e)
    images.append(img)

这里加入异常处理,是因为,每次执行img.setflags(write=1),都会报如下错误:
cannot set WRITABLE flag to True of this array
虽然保存图片是可以的,但是没有办法基于图像相关的ndarray做后续的画框等操作。
查了一下资料,做如下处理即可:
img = np.require(img, dtype='f4', requirements=['O', 'W'])
完整代码如下:

pil_images = pdf2image.convert_from_path(pdf_path, dpi)

images = []
for pil_img in pil_images:
    img = np.asarray(pil_img)
    img = np.require(img, dtype='f4', requirements=['O', 'W'])
    try:
        img.setflags(write=1)
    except Exception as e:
        logger.warn(e)
    images.append(img)

推荐阅读更多精彩内容