(OpenCV+Python)--视频流局部区域像素值处理

本文介绍如何使用Python和OpenCV从摄像头实时捕获视频流,并针对每一帧中的特定矩形区域进行像素值处理。通过对选定区域的像素值进行行求和,形成一维数组,并据此实时绘制条形图,最终实现实时视频处理及图形展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考我之前写的处理图片的文章:Python+OpenCV实现【图片】局部区域像素值处理(改进版)

开发环境:Python3.6.0 + OpenCV3.2.0

任务目标:摄像头采集图像(例如:480640),并对视频流每一帧(灰度图)特定矩形区域(48030)像素值进行行求和,得到一个480*1的数组,用这480个数据绘制条形图,即在逐帧采集视频流并处理后“实时”显示采集到的视频,并“实时”更新条形图。工作流程如下图:

这里写图片描述

这里写图片描述

源码:

# -*- coding:utf-8 -*-
import cv2
import numpy as np

camera = cv2.VideoCapture(0) # 参数0表示第一个摄像头
# camera = cv2.VideoCapture("test.avi") # 从文件读取视频

# 判断视频是否打开
if (camera.isOpened()):
    print 'Open'
else:
    print 'Fail to open!'

# # 测试用,查看视频size
# size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)),
#        int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT)))
# print 'size:'+repr(size)

rectangleCols = 30
while True:
    grabbed, frame_lwpCV = camera.read() # 逐帧采集视频流
    if not grabbed:
        break
    gray_lwpCV = cv2.cvtColor(frame_lwpCV, cv2.COLOR_BGR2GRAY) # 转灰度图
    frame_data = np.array(gray_lwpCV)  # 每一帧循环存入数组
    box_data = frame_data[:, 400:400+rectangleCols] # 取矩形目标区域
    pixel_sum = np.sum(box_data, axis=1) # 行求和q
    length = len(gray_lwpCV)
    x = range(length)
    emptyImage = np.zeros((rectangleCols*10, length*2, 3), np.uint8)
    for i in x:
        cv2.rectangle(emptyImage, (i*2, (rectangleCols-pixel_sum[i]/255)*10), ((i+1)*2, rectangleCols*10), (255, 0, 0), 1)
    emptyImage = cv2.resize(emptyImage, (320, 240))

    # 画目标区域
    lwpCV_box = cv2.rectangle(frame_lwpCV, (400, 0), (430, length), (0, 255, 0), 2)
    cv2.imshow('lwpCVWindow', frame_lwpCV) # 显示采集到的视频流
    cv2.imshow('sum', emptyImage)  # 显示画出的条形图
    key = cv2.waitKey(1) & 0xFF
    if key == ord('q'):
        break
camera.release()
cv2.destroyAllWindows()

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值