1

Черно-белое изображение, показывающее лицо улыбки внутри рамки.Как найти расположение правого черного пикселя

smiling face

То, что я хочу, чтобы выяснить местонахождение самой правой точки улыбки лицо. (в этом случае цвет черный должен быть около «184,91» изображения)

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

from PIL import Image 
im = Image.open("face.jpg") 
print im.convert('RGB').getcolors() # or print im.getcolors() 

Однако он возвращает None, и я застрял.

Как я могу получить самую правильную точку лица?

+0

Не ответ на этот вопрос, но знаете ли вы, что есть больше черные точки звездная граница? –

+0

@tobias_k, спасибо за комментарий. Я думаю, есть ли способ ограничить поиск определенным диапазоном, например от «40,30» до «200,160» и т. Д. –

+0

Ну, вы можете «обрезать» изображение, но тогда вам нужно знать размер смайлик (чтобы не уронить слишком много), чтобы определить размер смайлика ... –

ответ

1

Это решение, которое я придумал:

import numpy as np 
from skimage import io 

img = io.imread('https://i.stack.imgur.com/sbqcu.jpg', as_grey=True) 

left, right, top, bottom = 25, 25, 20, 20 
crop = img[top: -bottom, left:- right] 
threshold = .85 
smiley = crop < threshold 

rows, cols = np.nonzero(smiley) 
rightmost = cols.max() 
indices = np.nonzero(cols==rightmost) 

for r, c, in zip(rows[indices], cols[indices]): 
    print('(%d, %d)' % (r + top, c + left)) 

код, приведенный выше доходности:

(87, 184) 
(88, 184) 
(89, 184) 
(90, 184) 
(91, 184) 
(92, 184) 
(93, 184) 
(94, 184) 
(95, 184) 
(96, 184) 
(97, 184) 
(98, 184) 

Это согласуется с тем фактом, что есть вертикальная прямая линия в правую часть улыбающееся лицо.

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

threshold = .95 
io.imshow(crop < threshold) 

smiley

+0

Благодарим вас за помощь! –

0

Косвенным образом, может быть, я могу: 1. Снимите рамку 2. подрезать белый

То, что осталось это ядро ​​само изображение. Размер изображения может указывать координаты, если изображение ядра имеет правильный рисунок.

from PIL import Image 

img = Image.open("c:\\smile.jpg") 
img2 = img.crop((30, 26, 218, 165)) # remove the frame 
img2.save("c:\\cropped-smile.jpg") 

Trim whitespace using PIL учит, как удалить круг белых частей.

def trim(im): 
    bg = Image.new(im.mode, im.size, im.getpixel((0,0))) 
    diff = ImageChops.difference(im, bg) 
    diff = ImageChops.add(diff, diff, 2.0, -100) 
    bbox = diff.getbbox() 
    if bbox: 
     return im.crop(bbox) 

im = Image.open("c:\\cropped-smile.jpg") 
im = trim(im) 
im.save("c:\\final-smile.jpg") 

Теперь, чтобы получить размер основного изображения.

im = Image.open("c:\\final-sbqcu.jpg") 
w, h = im.size 

Я получил это как 131,132. Так что 131,66 будет самой правой точкой изображения.

+0

однако это 131,66 является самым правым из смайлика, а не местоположением самого правого в полном изображении. –

 Смежные вопросы

  • Нет связанных вопросов^_^