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

У меня есть входное изображение с фотографией рта на темном фоне: входное изображение

Мне нужна только часть рта в качестве вывода: выходное изображение

Ответы [ 3 ]

0 голосов
/ 04 ноября 2019

Попробуйте Обрезать черные края с помощью OpenCV

import numpy as np
import cv2

img = cv2.imread('./data/q18.png')

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#play with parameters that all I changed in answer
_,thresh = cv2.threshold(gray,20,255,cv2.THRESH_BINARY)

# and here are 3 value returned not 2 
_,contours,_ = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
x,y,w,h = cv2.boundingRect(cnt)


crop = img[y:y+h,x:x+w]
cv2.imwrite('./data/q18_1.png',crop)

Вывод:

enter image description here

0 голосов
/ 04 ноября 2019

Вот так с PIL / Pillow:

#!/usr/bin/env python3

from PIL  import Image

# Load image and convert to greyscale
im = Image.open('mouth.png').convert('L') 

# Threshold at 40
thr = im.point(lambda p: p > 40 and 255)

# Find bounding box
bbox = thr.getbbox()

# Debug
print(bbox)

# Crop and save
result = im.crop(bbox)
result.save('result.png')       

Пример вывода

(70, 155, 182, 223)

enter image description here

0 голосов
/ 04 ноября 2019

Используйте библиотеку https://scikit -image.org / . Вы можете обрезать его так же просто, как показано ниже.

from skimage import io
image = io.imread(filename)
cropped = image[x1:x2,y1:y2]
...