multiprocessing.pool 中调用cv2.imwrite写的图片有些不完整

发布于 2022-09-05 22:16:36 字数 1072 浏览 18 评论 0

任务是将一大堆图片分别切割成一些小图。使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

生死何惧 2022-09-12 22:16:36

proposals 和 bboxes 得看下~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文