45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
#模板匹配完成视频处理
|
|
|
|
import cv2 as cv
|
|
from tqdm import tqdm
|
|
|
|
video_path='video.mp4'
|
|
template_path='template.png'
|
|
output_path='output.mp4'
|
|
|
|
template = cv.imread(template_path, cv.IMREAD_GRAYSCALE)
|
|
template_height, template_width = template.shape[:2]
|
|
|
|
cap = cv.VideoCapture(video_path)
|
|
|
|
frame_width = int(cap.get(cv.CAP_PROP_FRAME_WIDTH))
|
|
frame_height = int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
|
|
fps = cap.get(cv.CAP_PROP_FPS)
|
|
total_frames = int(cap.get(cv.CAP_PROP_FRAME_COUNT))
|
|
fourcc = cv.VideoWriter_fourcc(*'mp4v')
|
|
|
|
out = cv.VideoWriter(output_path, fourcc, fps, (frame_width, frame_height))
|
|
|
|
with tqdm(total=total_frames,desc="视频处理中:",unit="帧") as pbar:
|
|
while True:
|
|
ret, frame = cap.read()
|
|
if not ret:
|
|
break
|
|
|
|
gray_frame = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
|
|
|
|
result= cv.matchTemplate(gray_frame, template, cv.TM_CCOEFF_NORMED)
|
|
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(result)
|
|
|
|
threshold = 0.8
|
|
if max_val >= threshold:
|
|
top_left = max_loc
|
|
bottom_right = (top_left[0] + template_width, top_left[1] + template_height)
|
|
|
|
cv.rectangle(frame, top_left, bottom_right, (0, 0, 255), 2)
|
|
|
|
out.write(frame)
|
|
pbar.update(1)
|
|
|
|
cap.release()
|
|
out.release() |