video
This commit is contained in:
parent
adfd363c6b
commit
330add6932
93
videoKard.py
93
videoKard.py
@ -1,67 +1,62 @@
|
|||||||
import cv2
|
import cv2
|
||||||
import os
|
import numpy as np
|
||||||
|
|
||||||
# Создаем папку для сохранения вырезанных объектов
|
def detect_rectangle(frame, template, threshold):
|
||||||
output_folder = 'output_rectangles'
|
result = cv2.matchTemplate(frame, template, cv2.TM_CCOEFF_NORMED)
|
||||||
if not os.path.exists(output_folder):
|
_, max_val, _, max_loc = cv2.minMaxLoc(result)
|
||||||
os.makedirs(output_folder)
|
|
||||||
|
|
||||||
# Инициализируем видеокамеру
|
# Check if the maximum correlation coefficient is above the threshold
|
||||||
cap = cv2.VideoCapture(0)
|
print(max_val)
|
||||||
|
|
||||||
# Ширина и высота прямоугольника
|
if max_val >= threshold:
|
||||||
rect_width, rect_height = 340, 200
|
# Define the rectangle area
|
||||||
|
h, w = template.shape[:2]
|
||||||
|
top_left = max_loc
|
||||||
|
bottom_right = (top_left[0] + w, top_left[1] + h)
|
||||||
|
|
||||||
while True:
|
# Draw rectangle on the frame
|
||||||
# Считываем кадр с камеры
|
cv2.rectangle(frame, top_left, bottom_right, (0, 255, 0), 2)
|
||||||
ret, frame = cap.read()
|
|
||||||
|
|
||||||
# Определение координат центра экрана
|
# Crop the region within the rectangle
|
||||||
center_x, center_y = frame.shape[1] // 2, frame.shape[0] // 2
|
cropped_region = frame[top_left[1]:bottom_right[1], top_left[0]:bottom_right[0]]
|
||||||
|
|
||||||
# Вычисляем координаты верхнего левого и нижнего правого углов прямоугольника
|
# Save the cropped region as an image
|
||||||
x1, y1 = center_x - rect_width // 2, center_y - rect_height // 2
|
cv2.imwrite('output_vlad.png', cropped_region)
|
||||||
x2, y2 = center_x + rect_width // 2, center_y + rect_height // 2
|
exit(0)
|
||||||
|
|
||||||
# Рисуем прямоугольник для поднесения объекта
|
return frame
|
||||||
cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2)
|
|
||||||
|
|
||||||
# Отображаем кадр
|
def main():
|
||||||
cv2.imshow('Frame', frame)
|
# Load the template image (ID card template)
|
||||||
|
template = cv2.imread('img/imgsmall.png', 0) # Make sure to replace with the actual template image
|
||||||
|
|
||||||
# Считываем кадр с камеры в оттенках серого
|
# Start capturing video from the default camera (you can change the index if using an external camera)
|
||||||
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
cap = cv2.VideoCapture(0)
|
||||||
|
|
||||||
# Выполняем размытие для уменьшения шумов
|
while True:
|
||||||
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
|
# Read a frame from the camera
|
||||||
|
ret, frame = cap.read()
|
||||||
|
|
||||||
# Выполняем детекцию краев с использованием оператора Canny
|
if not ret:
|
||||||
edges = cv2.Canny(blurred, 50, 150)
|
print("Failed to capture frame")
|
||||||
|
break
|
||||||
|
|
||||||
# Находим контуры в изображении
|
# Convert the frame to grayscale
|
||||||
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
||||||
|
|
||||||
# Ищем прямоугольники, соответствующие заданным размерам
|
# Detect rectangles in the frame with a threshold
|
||||||
for contour in contours:
|
frame_with_rectangle = detect_rectangle(gray_frame, template, threshold=0.5)
|
||||||
x, y, w, h = cv2.boundingRect(contour)
|
|
||||||
if rect_width - 50 <= w <= rect_width + 50 and rect_height - 50 <= h <= rect_height + 50 and \
|
|
||||||
x >= x1 and y >= y1 and x + w <= x2 and y + h <= y2:
|
|
||||||
# Рисуем прямоугольник вокруг объекта
|
|
||||||
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
|
|
||||||
|
|
||||||
# Вырезаем объект из кадра
|
# Display the result
|
||||||
roi = frame[y:y + h, x:x + w]
|
cv2.imshow('Object Detection', frame_with_rectangle)
|
||||||
|
|
||||||
# Генерируем имя файла для сохранения
|
# Break the loop if 'q' is pressed
|
||||||
filename = os.path.join(output_folder, 'rectangle_object.jpg')
|
if cv2.waitKey(1) & 0xFF == ord('q'):
|
||||||
|
break
|
||||||
|
|
||||||
# Сохраняем изображение объекта
|
# Release the camera and close all OpenCV windows
|
||||||
cv2.imwrite(filename, roi)
|
cap.release()
|
||||||
|
cv2.destroyAllWindows()
|
||||||
|
|
||||||
# Выход из цикла при нажатии клавиши 'q'
|
if __name__ == "__main__":
|
||||||
if cv2.waitKey(1) == ord('q'):
|
main()
|
||||||
break
|
|
||||||
|
|
||||||
# Освобождаем ресурсы
|
|
||||||
cap.release()
|
|
||||||
cv2.destroyAllWindows()
|
|
||||||
|
Loading…
Reference in New Issue
Block a user