gpt4 book ai didi

Python:从处理后的图像中创建视频

转载 作者:行者123 更新时间:2023-12-02 17:09:27 24 4
gpt4 key购买 nike

我有一段视频,其中记录了汽车的前 View 。该文件是一个 .mp4 文件,我想处理单个图像,以便提取更多信息(对象、车道线等)。问题是,当我想从处理过的文件中创建视频时,出现错误。这是我到目前为止所做的:

  • 使用 cv2.VideoCapture() 打开视频 - 工作正常
  • 使用 cv2.imwrite() 保存视频的单帧 - 工作正常
  • 使用 cv2.VideoWriter() 从单帧创建视频 - 工作正常
  • 使用 cv2.cvtColor()、cv2.GaussianBlur() 和 cv2.Canny() 对视频进行后处理 - 工作正常
  • 从处理后的图像中创建视频 - 不起作用。

  • 这是我使用的代码:
    enter code here
    def process_image(image):
    gray = functions.grayscale(image)
    blur_gray = functions.gaussian_blur(gray, 5)
    canny_blur = functions.canny(blur_gray, 100, 200)

    return canny_blur

    process_on =0
    count =0

    video= cv2.VideoWriter("output.avi", cv2.VideoWriter_fourcc(*"MJPG"), 10, (1600, 1200))

    vidcap = cv2.VideoCapture('input.mp4')
    success,image = vidcap.read()

    success = True
    while success:
    processed = process_image(image)
    video.write(processed)

    这是我得到的错误:

    OpenCV Error: Assertion failed (img.cols == width && img.rows == height*3) in cv::mjpeg::MotionJpegWriter::write, file D:\Build\OpenCV\opencv-3.2.0\modules\videoio\src\cap_mjpeg_encoder.cpp, line 834 Traceback (most recent call last): File "W:/Roborace/03_Information/10_Data/01_Montreal/camera/right_front_camera/01_Processed/Roborace_CAMERA_create_video.py", line 30, in video.write(processed) cv2.error: D:\Build\OpenCV\opencv-3.2.0\modules\videoio\src\cap_mjpeg_encoder.cpp:834: error: (-215) img.cols == width && img.rows == height*3 in function cv::mjpeg::MotionJpegWriter::write



    我的建议是:由于 RGB 颜色字段,普通图像具有 3 个维度。处理后的图像只有一维。我如何在 cv2.VideoWriter 函数中调整它。

    谢谢你的帮助

    最佳答案

    VideoWriter()类只写入彩色图像,而不是灰度图像,除非你在 Windows 上,看起来你可能是从输出中的路径判断的。在 Windows 上,您可以传递可选参数 isColor=0isColor=FalseVideoWriter()构造函数来编写单 channel 图像。否则,简单的解决方案是将灰度帧堆叠成三 channel 图像(您可以使用 cv2.merge([gray, gray, gray]) 并编写它。

    来自 VideoWriter() docs :

    Parameters:

    isColor – If it is not zero, the encoder will expect and encode color frames, otherwise it will work with grayscale frames (the flag is currently supported on Windows only).



    所以默认情况下, isColor=True并且标志不能在非 Windows 系统上更改。所以简单地做:
    video.write(cv2.merge([processed, processed, processed])

    应该修补你。尽管 Windows 变体允许编写灰度帧,但最好使用第二种方法来实现平台独立性。

    也称为 Zindarod mentions in the comments below您的代码在这里还有许多其他可能的问题。我假设您粘贴了您实际上并未在此处运行的修改代码,或者您本来会修改的代码...如果是这种情况,请仅发布 minimal, complete, and verifiable代码示例。

    首先,你的循环没有结束条件,所以它是不确定的。其次,您正在硬编码帧大小,但 VideoWriter()不会简单地将图像调整为该大小。您必须提供要传递到 VideoWriter() 的框架的大小。 .确保在写入之前将框架调整为相同大小,或者创建您的 VideoWriter使用您的 VideoCapture() 中定义的帧大小设备(使用 .get() methods 作为帧大小属性)。

    此外,您只读取循环外的第一帧。也许这是故意的,但如果你想处理视频的每一帧,你当然需要循环读取它们,处理它们,然后写入它们。

    最后,您应该在代码中捕获一些更好的错误。例如,参见 OpenCV "Getting Started with Video" Python tutorial . “保存视频”部分有适当的检查和平衡:运行循环 while视频捕获设备打开,并且仅当 frame 时才处理和写入帧被正确阅读;然后一旦超出帧, .read()方法将返回 False ,这将允许您跳出循环,然后关闭捕获和写入器设备。注意这里的顺序--- VideoCapture()即使您已阅读最后一帧,设备仍将“打开”,因此您需要通过检查帧的内容来关闭循环。

    关于Python:从处理后的图像中创建视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46526157/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com