Сделать изображение более гладким с белым обведенным фоном

#python #image-processing

#питон #обработка изображений #python

Вопрос:

Я хочу, чтобы этот проект был выполнен на Python

У меня есть этот маг, я хочу сделать каждое загружаемое изображение похожим на изображение ниже У меня есть этот маг, я хочу сделать каждое изображение, которое я загружаю, похожим на изображение ниже

Каждое изображение должно быть обведено вот так, если для его обведения требуется какая-либо граница, добавьте границу, в противном случае не добавляйте никакой границы и добавьте серый фон Каждое изображение должно быть обведено вот так, если для его обведения требуется какая-то граница, добавьте границу, в противном случае не добавляйте никакой границы

Ответ №1:

Вот один из способов сделать это в Python OpenCV.

  • Прочитайте входные данные
  • Вычислить максимальный размер, смещения и центр ввода
  • Создайте белое изображение максимального размера плюс отступы
  • Вставьте входное изображение в центр белого изображения
  • Создайте серое фоновое изображение того же размера, что и белое изображение
  • Нарисуйте черный круг диаметром, равным максимальному размеру, в центре серого фона
  • Размытие черного круга для создания тени
  • Создайте белый круг диаметром, равным максимальному размеру, в центре черного изображения
  • Смешайте изображение на белом фоне с размытым черным кругом на заднем плане, чтобы сформировать результат
  • Сохраните результат

Ввод:

введите описание изображения здесь

 import cv2
import numpy as np

# load image and get maximum dimension
img = cv2.imread("radio_skull.jpg")
hh, ww = img.shape[:2]
maxwh = max(ww,hh)
offx = (maxwh - ww) // 2
offy = (maxwh - hh) // 2
cx = maxwh // 2
cy = maxwh // 2
pad = 10
pad2 = 2*pad

# create white image of size maxwh plus 10 pixels padding all around
white = np.full((maxwh pad2, maxwh pad2, 3), (255,255,255), dtype=np.uint8)

# put input img into center of white image
img_white = white.copy()
img_white[offy pad:offy pad hh, offx pad:offx pad ww] = img

# create light gray background image with 10 pixel padding all around
bckgrnd = np.full((maxwh pad2,maxwh pad2,3), (192,192,192), dtype=np.uint8)

# create black circle on background image for drop shadow
cv2.circle(bckgrnd, (cx pad,cy pad), cx, (0,0,0), -1)

# blur black circle
bckgrnd = cv2.GaussianBlur(bckgrnd, (25,25), 0)

# create white circle on black background as mask
mask = np.zeros_like(img_white)
cv2.circle(mask, (cx pad,cy pad), cx, (255,255,255), -1)

# use mask to blend img_white and bckgrnd
img_white_circle = cv2.bitwise_and(img_white, mask)
bckgrnd_circle = cv2.bitwise_and(bckgrnd, 255-mask)
result = cv2.add(img_white_circle, bckgrnd_circle)

# write result to disk
cv2.imwrite("radio_skull_img_white.jpg", img_white)
cv2.imwrite("radio_skull_background.jpg", bckgrnd)
cv2.imwrite("radio_skull_mask.jpg", mask)
cv2.imwrite("radio_skull_img_white_circle.jpg", img_white_circle)
cv2.imwrite("radio_skull_bckgrnd_circle.jpg", bckgrnd_circle)
cv2.imwrite("radio_skull_result.jpg", result)

# display it
cv2.imshow("img_white", img_white)
cv2.imshow("bckgrnd", bckgrnd)
cv2.imshow("mask", mask)
cv2.imshow("img_white_circle", img_white_circle)
cv2.imshow("bckgrnd_circle", bckgrnd_circle)
cv2.imshow("result", result)
cv2.waitKey(0)
  

Ввод на белом фоне:

введите описание изображения здесь

Размытый черный круг на фоне:

введите описание изображения здесь

Маска:

введите описание изображения здесь

Замаскированное изображение на белом:

введите описание изображения здесь

Замаскированный черный круг:

введите описание изображения здесь

Результат:

введите описание изображения здесь

Комментарии:

1. Это так точно, сэр, спасибо!