Удаление фона с веб-камеры OPENCV PYTHON - PullRequest
0 голосов
/ 05 февраля 2020

Я создаю сценарий, который будет читать состояние супермаркета и сообщать мне, если продуктов не хватает. Например, на изображении ниже есть некоторые места, где отсутствуют продукты. Я использую FAST метод, чтобы найти все углы в кадре. но иногда сценарии обнаруживают углы пола. То, что я хочу сделать, это удалить пол из рамы, прежде чем я найду углы.

enter image description here import cv2 import numpy как np

image = cv2.imread('gondola_imagem.jpeg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

fast = cv2.FastFeatureDetector_create()
# Obtain Key points, by default non max suppression is On
# to turn off set fast.setBool('nonmaxSuppression', False)
keypoints = fast.detect(gray, None)
print ("Number of keypoints Detected: ", len(keypoints))

image = cv2.drawKeypoints(image, keypoints, None, 
                          flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

cv2.imshow('Feature Method - FAST', image)
cv2.waitKey()
cv2.destroyAllWindows()

1 Ответ

0 голосов
/ 05 февраля 2020

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

Маска

Результат

Код следующим образом:

import numpy as np
import cv2
image = cv2.imread('test.jpg')
mask = cv2.imread('mask.jpg', 0)
cv2.imshow('Original', image)
cv2.imshow('Mask', mask)
res = cv2.bitwise_and(image,image,mask = mask)
gray = cv2.cvtColor(res, cv2.COLOR_BGR2GRAY)

fast = cv2.FastFeatureDetector_create()
# Obtain Key points, by default non max suppression is On
# to turn off set fast.setBool('nonmaxSuppression', False)
keypoints = fast.detect(gray, None)
print ("Number of keypoints Detected: ", len(keypoints))

image = cv2.drawKeypoints(image, keypoints, None, 
                      flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

cv2.imwrite('result.jpg', image)
cv2.imshow('Feature Method - FAST', image)
cv2.waitKey()
cv2.destroyAllWindows()

Редактировать: Если вы хотите сделать это в режиме реального времени (видео с веб-камеры), вам просто нужно сделать это для каждого кадра, который вы получаете с видеокамеры. Пока камера не движется, вы должны использовать одну и ту же маску для всех кадров. Вы можете сделать приведенный выше код функцией, а затем вызвать его с изображением в качестве параметра, как показано в следующем коде:

import numpy as np
import cv2
cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Following function will have to be created with the previews code
    CallFunctionToPreviewsCode(frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows() 

Приведенный выше код взят из OpenCV Python -Tutorials Это хорошее место для изучения OpenCV для Python языка программирования.

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