網(wǎng)站建設(shè)見站分析和準備論文最近幾天發(fā)生的新聞大事
預(yù)操作:
通過cv2將視頻的某一幀圖片轉(zhuǎn)為HSV模式,并通過鼠標獲取對應(yīng)區(qū)域目標的HSV值,用于后續(xù)的目標識別閾值區(qū)間的選取
``
img = cv.imread(r"D:\data\123.png")
img = cv.cvtColor(img, cv.COLOR_BGR2HSV)
plt.figure(1), plt.imshow(img)
plt.show()
(1)將視頻中識別的目標掩膜成紅色
end_frame[mask > 0] = [0, 0, 255]
(2)利用cv庫讀取顯示原始視頻
(3)在HSV閾值分割識別的視頻目標
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
# 定義分割黑色的上下區(qū)間,其代表的是目標物體的hsv空間內(nèi)的最小值和最大值
low = np.array([60, 60, 60])
up = np.array([130, 120, 120])
mask = cv.inRange(hsv, low, up)
(4)按位與運算之后的視頻目標(目標的真實色彩)
# 進行按位運算,白色的變?yōu)閒rame原來的顏色,其他還是黑色
res = cv.bitwise_and(frame, frame, mask=mask)
(5)主代碼(已經(jīng)給出解釋)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author: LIFEI
@time: 2023/8/29 14:39
@file: test4.py
@project: pythonProject
@describe: TODO
@# -------------------------------------------------(one)----------------------------------------------
@# -------------------------------------------------(two)----------------------------------------------
"""# -------------------------------------------------(one)----------------------------------------------
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt# img = cv.imread(r"D:\data\123.png")
# img = cv.cvtColor(img, cv.COLOR_BGR2HSV)
# plt.figure(1), plt.imshow(img)
# plt.show()def identify(path, point):# 創(chuàng)建一個video基類cap = cv.VideoCapture(path)# 當(dāng)cap被打開時開始循環(huán)while cap.isOpened():# 讀取視頻ret, frame = cap.read()# 拷貝圖像,賦值給end_frameend_frame = np.copy(frame)# 將視頻的BGR空間轉(zhuǎn)換為HSV空間hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)# 定義分割黑色的上下區(qū)間,其代表的是目標物體的hsv空間內(nèi)的最小值和最大值low = np.array([60, 60, 60])up = np.array([130, 120, 120])# 類似與閾值分割,就是將上述的區(qū)間類的物體改成白色,其他改為黑色mask = cv.inRange(hsv, low, up)# 進行按位運算,白色的變?yōu)閒rame原來的顏色,其他還是黑色res = cv.bitwise_and(frame, frame, mask=mask)# 將end_frame中的mask白色區(qū)域變成紅色end_frame[mask > 0] = [0, 0, 255]# 判斷幀率是否存在,若是不存在直接退出if not ret:break# 判斷輸出if point == 1:cv.imshow("frame", frame)elif point == 2:cv.imshow("mask", mask)elif point == 3:cv.imshow("avi", res)else:cv.imshow("end_frame", end_frame)# 這里理解為視頻的快慢,1表示原始速度,越大越慢,按‘q’退出顯示if cv.waitKey(15) & 0xFF == ord('q'):breakcv.waitKey(0)# 釋放cap.release()cv.destroyAllWindows()if __name__ == '__main__':# 視頻的路徑filepath = r"D:\data\plane.avi"# 訪問輸入的數(shù)值,后續(xù)循環(huán)要用value = input('請輸入一個數(shù)字(1表示ori,2表示mask,3表示res,4表示end_frame):')# 轉(zhuǎn)為整型value = int(value)# 開始操作identify(filepath, value)# -------------------------------------------------(two) - -------------------------------------------