LINUX.ORG.RU

код не работает для opencv с видео

 ,


0

1

Ниже код решение для моей проблемы:

cap = cv2.VideoCapture('path')

while(True):

    _, frame = cap.read()

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    black1 = np.array([0, 0, 0], np.uint8)

    black2 = np.array([45,35,35], np.uint8)

    red1 = np.array([170, 70, 50], np.uint8)

    red2 = np.array([180, 255, 255], np.uint8)

    red_mask = cv2.inRange(hsv, red1, red2)

    black_mask = cv2.inRange(hsv, black1, black2)

    kernel = np.ones((7, 7), "uint8")

    black_mask = cv2.dilate(black_mask, kernel)

    red_mask = cv2.dilate(red_mask, kernel)

    res_red = cv2.bitwise_and(frame, frame, mask = red_mask)

    res_black = cv2.bitwise_and(frame, frame, mask = black_mask)

    cnts, _ = cv2.findContours(black_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

    contours, _ = cv2.findContours(red_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

    for cont in contours:
        x1,y1,w1,h1 = cv2.boundingRect(cont)
        area_red = cv2.contourArea(cont)
        if (1000 > area_red >200):
            cv2.rectangle(frame, (x1,y1), (x1+w1, y1+h1), (255,0,0, 2))

    for c in cnts:
        x,y,w,h = cv2.boundingRect(c)
        approx = cv2.approxPolyDP(c, 0.04 * cv2.arcLength(c, True), True)
        area = cv2.contourArea(c)
        if (1000 > area > 250):
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)

    cv2.imshow("Video from camera", frame)
    if cv2.waitKey(10) & 0xFF == ord('q'):
        break



Последнее исправление: katemisik (всего исправлений: 2)

Код не показывает ошибки, но не работает

Телепаты в отпуске. Ты хоть пробовала прям отдельно фреймы из видео сохранять в картинки и запускать свою распознавалку? Я имею ввиду выдирать фреймы как ты тут через cv делаешь и прям так сохранять?

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

вот тот код что работает, хочу его переделать чтобы распознавать видео

import cv2
import numpy as np
from cv2 import VideoCapture
from cv2 import waitKey

image = cv2.imread('C:/Users/kamil/Desktop/N/123.jpg')

blur = cv2.GaussianBlur(image, (7,7), 0)
hsv = cv2.cvtColor(blur, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, (0,0,0), (179,255,55))

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7,7))
opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel, iterations=1)
close = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel, iterations=2)

cnts,_ = cv2.findContours(close, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for c in cnts:
    approx = cv2.approxPolyDP(c, 0.04 * cv2.arcLength(c, True), True)
    area = cv2.contourArea(c)
    #if len(approx) > 3 and area > 40:
    #if (135000 > area > 40):
    if (15000 > area > 40):
        cv2.drawContours(image, [c], -1, (0,255,0), -1)

cv2.imshow('image', image)
if cv2.waitKey(0):
    cv2.destroyAllWindows()
katemisik
() автор топика

Ты мой вопрос не понимаешь или прикидываешься? Я говорю: сохрани фреймы из видео, когда достаешь их через opencv и посмотри что не так.

Aswed ★★★★★
()
Ответ на: комментарий от katemisik

Форум - это не твоя личная техподдержка а обоюдный обмен информацией.

Если вопрос решён - пиши как именно он был решён. И какой урок ты и все остальные должны из этого извлечь.

alpha ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.