Python Canny边缘检测视频处理函数
这段代码是一个Python函数,用于Canny边缘检测视频。函数读取视频帧、进行Canny边缘检测,并将边缘图像转换为QImage格式,最后将QImage显示在界面上。函数使用一个定时器来控制视频播放帧率,每隔0.03秒调用一次函数来更新视频帧。
def canny_video(self):
if self.cap is not None:
# 读取视频帧
ret, frame = self.cap.read()
if ret:
# Canny边缘检测
edges = cv2.Canny(frame, self.threshold, self.threshold * 2)
# 将边缘图像转换为QImage格式
qimage = QImage(edges.data, edges.shape[1], edges.shape[0], QImage.Format_Grayscale8)
# 将QImage显示在界面上
pixmap = QPixmap.fromImage(qimage)
self.video_label.setPixmap(pixmap)
# 启动视频播放定时器
self.timer = threading.Timer(0.03, self.canny_video)
self.timer.start()
代码解析:
-
canny_video(self)函数:- 该函数负责进行视频帧的读取、Canny边缘检测和图像显示。
self代表当前对象,用于访问类的属性和方法。
-
if self.cap is not None::- 检查视频捕捉对象
self.cap是否存在,如果存在则进行后续操作。
- 检查视频捕捉对象
-
ret, frame = self.cap.read():- 读取视频帧,并将结果存储在
ret和frame变量中。 ret为布尔值,表示是否成功读取到帧。frame为读取到的视频帧图像。
- 读取视频帧,并将结果存储在
-
if ret::- 如果成功读取到帧,则进行 Canny 边缘检测。
-
edges = cv2.Canny(frame, self.threshold, self.threshold * 2):- 使用
cv2.Canny()函数进行 Canny 边缘检测。 frame为输入图像。self.threshold为低阈值,self.threshold * 2为高阈值。
- 使用
-
qimage = QImage(edges.data, edges.shape[1], edges.shape[0], QImage.Format_Grayscale8):- 将 Canny 边缘检测后的图像转换为 QImage 格式。
edges.data为边缘图像数据。edges.shape[1]和edges.shape[0]分别为图像的宽度和高度。QImage.Format_Grayscale8指定图像格式为灰度图。
-
pixmap = QPixmap.fromImage(qimage):- 将 QImage 转换为 QPixmap 格式,方便在界面上显示。
-
self.video_label.setPixmap(pixmap):- 将 QPixmap 设置为界面上的视频标签
self.video_label的图像。
- 将 QPixmap 设置为界面上的视频标签
-
self.timer = threading.Timer(0.03, self.canny_video):- 创建一个定时器,每隔 0.03 秒调用一次
self.canny_video()函数,实现视频播放。
- 创建一个定时器,每隔 0.03 秒调用一次
-
self.timer.start():- 启动定时器。
总结:
这段代码通过读取视频帧、进行 Canny 边缘检测、将边缘图像转换为 QImage 格式,并将其显示在界面上,实现了对视频的边缘检测功能。定时器确保了视频播放的帧率,每隔 0.03 秒更新一次视频帧。
原文地址: https://www.cveoy.top/t/topic/nzs6 著作权归作者所有。请勿转载和采集!