以不同名称循环保存图像

新手上路,请多包涵

我在循环保存裁剪后的图像时遇到问题。我的代码:

 def run(self, image_file):
    print(image_file)
    cap = cv2.VideoCapture(image_file)
    while(cap.isOpened()):
        ret, frame = cap.read()
        if ret == True:
            img = frame
            min_h = int(max(img.shape[0] / self.min_height_dec, self.min_height_thresh))
            min_w = int(max(img.shape[1] / self.min_width_dec, self.min_width_thresh))
            gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
            faces = self.face_cascade.detectMultiScale(gray, 1.3, minNeighbors=5, minSize=(min_h, min_w))

            images = []
            for i, (x, y, w, h) in enumerate(faces):
                images.append(self.sub_image('%s/%s-%d.jpg' % (self.tgtdir, self.basename, i + 1), img, x, y, w, h))
            print('%d faces detected' % len(images))

            for (x, y, w, h) in faces:
                self.draw_rect(img, x, y, w, h)
                # Fix in case nothing found in the image
            outfile = '%s/%s.jpg' % (self.tgtdir, self.basename)
            cv2.imwrite(outfile, img)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break
    cap.release()
    cv2.destroyAllWindows()
    return images, outfile

我对每一帧都有一个循环,在脸上进行裁剪。问题是,对于每张裁剪后的图像和图片,它都给出了相同的名称,最后我只有最后一帧的面孔。我应该如何修复此代码以保存所有裁剪的面孔和图像?

原文由 GGzet 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 650
2 个回答

您正在用相同的名称保存每个文件。因此,您正在覆盖以前保存的图像

outfile = '%s/%s.jpg' % (self.tgtdir, self.basename)

将此行更改为在名称中添加随机字符串

outfile = '%s/%s.jpg' % (self.tgtdir, self.basename + str(uuid.uuid4()))

您也需要在文件顶部添加 import uuid

原文由 Colwin 发布,翻译遵循 CC BY-SA 3.0 许可协议

我认为这会有所帮助…

 import cv2

vid = cv2.VideoCapture("video.mp4")
d = 0
ret, frame = vid.read()

while ret:
    ret, frame = vid.read()
    filename = "images/file_%d.jpg"%d
    cv2.imwrite(filename, frame)
    d+=1

这将以不同的名称保存每一帧。

原文由 nima farhadi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题