You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python保存摄像头采集的Canny边缘检测视频?

实现Canny边缘检测视频的保存(基于OpenCV)

要保存Canny边缘检测后的视频,你需要在代码中添加视频写入器初始化和帧写入的逻辑,具体步骤和修改后的代码如下:

需要添加的核心部分

  • 初始化cv2.VideoWriter对象,指定输出路径、编码器、帧率和分辨率
  • 在循环中将Canny处理后的灰度帧转换为视频编码器支持的格式(通常为三通道BGR)
  • 循环结束后释放视频写入器

修改后的完整代码

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

# 获取摄像头的分辨率
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 设置视频参数:输出路径、编码器、帧率、分辨率
# 保存为MP4格式用'MP4V',AVI格式用'XVID'
fourcc = cv2.VideoWriter_fourcc(*'MP4V')
# 注意:Canny输出的是单通道灰度图,需转成三通道BGR才能被多数编码器支持
out = cv2.VideoWriter('canny_edges_output.mp4', fourcc, 20.0, (frame_width, frame_height))

# loop runs if capturing has been initialized
while 1:
    ret, frame = cap.read() 
    if not ret:
        break  # 读取失败则退出循环

    # converting BGR to HSV 
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 
    
    # define range of red color in HSV 
    lower_red = np.array([5,50,50]) 
    upper_red = np.array([15,255,255]) 
    
    # create a red HSV colour boundary and  
    # threshold HSV image 
    mask = cv2.inRange(hsv, lower_red, upper_red) 

    # Bitwise-AND mask and original image 
    res = cv2.bitwise_and(frame,frame, mask= mask) 

    # Display an original image 
    cv2.imshow('Original',frame) 

    # finds edges in the input image image and 
    # marks them in the output map edges 
    edges = cv2.Canny(frame,100,200) 

    # 将单通道灰度图转为三通道BGR,适配视频编码器
    edges_bgr = cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR)
    # 写入处理后的帧到视频文件
    out.write(edges_bgr)

    # Display edges in a frame 
    cv2.imshow('Edges',edges) 

    # Wait for Esc key to stop 
    k = cv2.waitKey(5) & 0xFF
    if k == 27: 
        break

# 释放资源
cap.release()
out.release()  # 必须释放视频写入器
cv2.destroyAllWindows()

关键说明

  • 编码器选择:如果要保存为AVI格式,将fourcc = cv2.VideoWriter_fourcc(*'MP4V')改为fourcc = cv2.VideoWriter_fourcc(*'XVID'),同时修改输出文件名为canny_edges_output.avi
  • 帧率设置:代码中用20.0,你可以根据摄像头实际帧率调整(可用cap.get(cv2.CAP_PROP_FPS)获取)
  • 异常处理:添加了if not ret: break来处理摄像头读取失败的情况,避免程序崩溃

内容的提问来源于stack exchange,提问作者Jed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:07:29