首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用cv2和MTCNN写视频?我正面临着fourcc的问题

如何用cv2和MTCNN写视频?我正面临着fourcc的问题
EN

Stack Overflow用户
提问于 2020-11-12 19:30:27
回答 1查看 152关注 0票数 2

我正在试着写一个在视频中匿名面孔的脚本。

下面是我的代码(python):

代码语言:javascript
复制
import cv2
from mtcnn.mtcnn import MTCNN

ksize = (101, 101)


def decode_fourcc(cc):
    return "".join([chr((int(cc) >> 8 * i) & 0xFF) for i in range(4)])


def find_face_MTCNN(color, result_list):
    for result in result_list:
        x, y, w, h = result['box']
        roi = color[y:y+h, x:x+w]
        cv2.rectangle(color, (x, y), (x+w, y+h), (0, 155, 255), 5)
        detectedFace = cv2.GaussianBlur(roi, ksize, 0)
        color[y:y+h, x:x+w] = detectedFace
    return color


detector = MTCNN()
video_capture = cv2.VideoCapture("basic.mp4")
width = int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
length = int(video_capture.get(cv2.CAP_PROP_FRAME_COUNT))
fps = int(video_capture.get(cv2.CAP_PROP_FPS))

video_out = cv2.VideoWriter(
    "mtcnn.mp4", cv2.VideoWriter_fourcc(*"mp4v"), fps, (width, height))

while length:
    _, color = video_capture.read()
    faces = detector.detect_faces(color)
    detectFaceMTCNN = find_face_MTCNN(color, faces)
    video_out.write(detectFaceMTCNN)
    cv2.imshow("Video", detectFaceMTCNN)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

fourccIN = video_capture.get(cv2.CAP_PROP_FOURCC)
fourccOUT = video_out.get(cv2.CAP_PROP_FOURCC)
print(f"input fourcc is: {fourccIN, decode_fourcc(fourccIN)}")
print(f"output fourcc is: {fourccOUT, decode_fourcc(fourccOUT)}")

video_capture.release()
cv2.destroyAllWindows()

我将得到一个带有匿名化的完美的工作窗口,所以imshow()工作得很好。但新保存的视频"mtcnn.mp4“无法打开。我发现问题出在新视频的fourcc格式,因为我的输出是:

代码语言:javascript
复制
input fourcc is: (828601953.0, 'avc1')
output fourcc is: (-1.0, 'ÿÿÿÿ')

这就是问题的核心……

有人能帮帮我吗?

他们可能面临着同样的问题:Using MTCNN with a webcam via OpenCV

我用它来编码四个to:What is the opposite of cv2.VideoWriter_fourcc?

EN

回答 1

Stack Overflow用户

发布于 2020-11-16 17:56:51

我更改了这一行:

代码语言:javascript
复制
video_out = cv2.VideoWriter(
    "mtcnn.mp4", cv2.VideoWriter_fourcc(*"mp4v"), fps, (width, height))

至:

代码语言:javascript
复制
video_out = cv2.VideoWriter(
    "mtcnn.avi", cv2.VideoWriter_fourcc(*'XVID'), fps, (width, height))

现在它对我起作用了

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64803078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档