1. 程式人生 > >【Python+OpenCV】視訊流區域性區域畫素值處理-一種特徵提取方法

【Python+OpenCV】視訊流區域性區域畫素值處理-一種特徵提取方法

開發環境:Python3.6.0 + OpenCV3.2.0

任務目標:攝像頭採集影象(例如:480*640),並對視訊流每一幀(灰度圖)特定矩形區域(480*30)畫素值進行行求和,得到一個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()