Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3648244
  • 博文数量: 365
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2522
  • 用 户 组: 普通用户
  • 注册时间: 2019-10-28 13:40
文章分类

全部博文(365)

文章存档

2023年(8)

2022年(130)

2021年(155)

2020年(50)

2019年(22)

我的朋友

分类: Python/Ruby

2022-08-18 11:44:35

import numpy as np

from 图像识别 import picutils

import cv2

# 读取视频

cap = cv2.VideoCapture('xxx.mp4')

# 设置标志位 超过5就变色

m = 0

while (1):

    m += 1

    # 颜色数组的下标

    l = 0

    # 颜色数组  实现rgb变化效果

    colos = [[0, 0, 255], [0, 255, 0], [255, 0, 0]]

    # frame存储每一帧的图像

    ret, frame = cap.read()

    # 转换为灰度图

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 二值处理   这里的阈值设置为130可能不是最好的,可以试着再改改  超过130就会变255,否则就是0,从而实现二值图像的生成

    thresh = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY)[1]

    # 边缘检测,检测出边缘方便轮廓提取

    edged = cv2.Canny(thresh, 75, 150)

    # 获取所有的轮廓,这里没有在进行处理,有兴趣可以提取出需要的

    cnts = cv2.findContours(edged, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]

    # 选择较大的轮廓

    real_cnts=[]

    for c in cnts:

        if cv2.arcLength(c,True)>30:

            real_cnts.append(c)

    # 设置一个白板图片,作为人物的背景板

    back = 跟单网gendan5.comnp.zeros((480, 720, 3), dtype="uint8") + 255

    # 展示5帧修改一次颜色数组的下标  l就是下标值

    if  m == 5:

        l = (l + 1) % 3

        m=0

    # 把轮廓绘制在白色的背景板上

    cv2.drawContours(back, real_cnts, -1, colos[l], 3)

    cv2.imshow('frame', back)

    k = cv2.waitKey(60) & 0xff

    # 等待退出键,就可以直接退出

    if k == 27:

        break

cap.release()

cv2.destroyAllWindows()

阅读(359) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~