OpenCV кадр несовместим с нарезкой - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь распечатать обнаруженный большой двоичный объект на черном кадре массива NumPy, который имеет такой же размер порядкового кадра, т.е. (640, 1280)

архитектура операционной системы Ubuntu (например, x86) x64 opencv4.1.0-Python версии 3.6.8

import cv2
import numpy as np


cap = cv2.VideoCapture('1.mp4')

e1_x1 = 760
e1_y1 = 150
e1_x2 = 845
e1_y2 = 195

e2_x1 = 800
e2_y1 = 150
e2_x2 = 880
e2_y2 = 200


black = np.zeros((640, 1280, 3), dtype = "uint8")
def blobSelection(eye,black):
    keypoints=blob_detector.detect(eye)
    for ma in keypoints:
        print(x,y)
        black = cv2.drawMarker(black, tuple(int(i) for i in ma.pt), color=(0, 255, 0))
    return black

while True:
    _, frame = cap.read()

    e1 = frame[e1_y1:e1_y2, e1_x1:e1_x2]
    cv2.rectangle(black, (e1_x1,e1_y1), (e1_x2,e1_y2), (255,0,0), 1, 8, 0)

    cv2.rectangle(frame, (e1_x1,e1_y1), (e1_x2,e1_y2), (255,0,0), 1, 8, 0)
    cv2.putText(frame, "e1", (e1_x1, e1_y2), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 255, 255), lineType=cv2.LINE_AA)
    cv2.rectangle(black, (e2_x1,e2_y1), (e2_x2,e2_y2), (255,0,0), 1, 8, 0)

    cv2.rectangle(frame, (e2_x1,e2_y1), (e2_x2,e2_y2), (255,0,0), 1, 8, 0)
    cv2.putText(frame, "e2", (e2_x1, e2_y2), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 255, 255), lineType=cv2.LINE_AA)
    e2 = frame[e2_y1:e2_y2, e2_x1:e2_x2]

    e1 = eyeDetection(e1, black)
    e2 = eyeDetection(e2,black)

    cv2.imshow('Orginal', frame)
    cv2.imshow('Detected eye', black)

    key = cv2.waitKey(1)
    if key == 27:
        break
cap.release()
cv2.destroyAllWindows()

enter image description here Я хочу, чтобы два глаза человека на исходном изображении были вставлены на черный фон одновременно.

1 Ответ

0 голосов
/ 25 июня 2019

Предполагая, что это

e1 = eyeDetection(e1, black)

на самом деле будет называть это

def blobSelection(eye,black):

Вам нужно будет передать смещение, чтобы нарисовать его в правильном месте, так как вы делаете обнаружение на глазкоторая является частью кадра, и полученные ключевые точки могут быть нарисованы внутри глаза, а не черными.

keypoints=blob_detector.detect(eye)

Я предлагаю сделать что-то вроде этого:

def blobSelection(eye,black, offset):
    keypoints=blob_detector.detect(eye)
    for ma in keypoints:
        pos = ma.pt
        black = cv2.drawMarker(black, (ma.pt[0] + offset[0], ma.pt[1] + offset[1]), color=(0, 255, 0))
    return black

И вы звонитеэто как:

e1 = blobSelection(e1, black, (e1_x1, e1_y1))

Предполагая, что (e1_x1, e1_y1) это верхний левый угол e1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...