分类: 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()