multiprocessing.pool 中调用cv2.imwrite写的图片有些不完整
任务是将一大堆图片分别切割成一些小图。使用multiprocessing.pool进程池来处理这个任务。
但是最后发现一小部分图片写的不完整。
import numpy as np
import cv2
import os.path as osp
import multiprocessing
import argparse
def splitimage(imputimagefilename):
im = cv2.imread(imputimagefilename)
bboxes = generage_boxes(im) # 这里省略,就是产生一堆坐标[x1,y1,x2,y2]来切割成小图片
for i in range(bboxes.shape[0]):
box = bboxes[i, :].astype(np.int)
img = im[box[0]:box[2],box[1]:box[3],:]
str_id = '{}-{:06}.jpg'.format(osp.splitext(osp.basename(imputimagefilename))[0],i)
cv2.imwrite(osp.join(outputdir, str_id), img)
if __name__ == '__main__':
args = parse_args()
imagedir = args.datadir
outputdir = args.outputdir
files = os.listdir(imagedir)
pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
pool.map(splitimage,[osp.join(imagedir,f) for f in files])
print 'done.'
python 2.7.10
cv2 2.4.13.2
问题就是cv2.imwrite还没写完就让pool.map换下一张图片了。
我又测试了下图片格式,将图片保存成bmp格式无问题,jpg有问题不少坏图片,png格式比jpg好很多但也有坏图片。opencv的问题?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
proposals 和 bboxes 得看下~