Как определить экран компьютера / ноутбука в изображении? - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь определить экран монитора компьютера или ноутбука.

Исходное изображение

Точки изображения

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

Код, который я использовал для поиска экрана:

import numpy as np
import imutils
import cv2

from PIL import Image 
args = {
   'query': '/Users/PC/Desktop/screendetect/mm.jpeg'
}
class dotdict(dict):
    def __getattr__(self, name):
        return self[name]

args = dotdict(args)
# load the query image, compute the ratio of the old height
# to the new height, clone it, and resize it
image = cv2.imread(args["query"])
ratio = image.shape[0] / 300.0
orig = image.copy()
image = imutils.resize(image, height = 300)

# convert the image to grayscale, blur it, and find edges
# in the image
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.bilateralFilter(gray, 11, 17, 17)
edged = cv2.Canny(gray, 30, 200)

# find contours
cnts = cv2.findContours(edged.copy(), cv2.RETR_TREE, 
cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:100]
screenCnt = None

# loop over our contours
for c in cnts:
# approximate the contour
    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.03 * peri, True)

    # if our approximated contour has four points, then
    # we can assume that we have found our screen
    if len(approx):
        screenCnt = approx
        break

# draw a rectangle around the screen
orig = image.copy()
d = cv2.drawContours(image, [screenCnt], -1, (0, 255, 0), 1)
cv2.imwrite("/Users/PC/Desktop/screendetect/test_good.jpg", d)
# cv2.waitKey(0)

На других тестовых изображениях будет только один монитор, поэтому мне нужно найти только один экран.Каков наилучший подход к решению этой проблемы?

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