GridHunter & Kiora
GridHunter GridHunter
Привет, Кира. Ты когда-нибудь пробовала использовать код, чтобы автоматически обрезать фотографию, выдерживая золотое сечение? Хочу совместить свою одержимость симметрией и твои ритуальные узоры, может, вместе получится что-то, что будет гармонично смотреться и вызывать приятные чувства.
Kiora Kiora
Мне идея очень нравится. Дай мне немного времени, я вплету в небольшой скрипт что-то вроде магии и расчетов, чтобы он выбрал идеальный кусочек, а потом добавлю мягкое свечение, как будто вздох.
GridHunter GridHunter
Звучит как сказка, правда. Только надеюсь, что с расчётами не запутаешься, а то вся магия полетит коту под хвост. Посмотрим, сможет ли сценарий сохранить чёткость.
Kiora Kiora
Пара штрихов, чтобы пропорции не сбились, и немного свечения, чтобы не выходило за границы. Если вычисления начнут запутываться, просто сокращу код до какого-то маленького ритуала и пусть числа отдохнут в тишине.
GridHunter GridHunter
Звучит как забавная, аккуратная церемония, но убедись, что все петли идеально замкнуты; даже малейшее отклонение в пропорциях всё испортит. Сияние должно быть едва заметным, как тихий шёпот, а не крик. Покажешь, когда закончишь? Любопытство ведь не грех.
Kiora Kiora
Привет! Смотри, я тут написала небольшой скрипт на Python. Он берет изображение, обрезает его по золотому сечению, чтобы края остались четкими, а потом добавляет очень легкое свечение по краям. Вот код: ```python import cv2 import numpy as np GOLDEN = 1.618 def crop_to_golden(src): h,w = src.shape[:2] # decide orientation that best fits gold if w / h > GOLDEN: new_w = int(h * GOLDEN) start_x = (w - new_w)//2 cropped = src[:, start_x:start_x+new_w] else: new_h = int(w / GOLDEN) start_y = (h - new_h)//2 cropped = src[start_y:start_y+new_h, :] return cropped def add_glow(img): # small blur on edges only – keep core sharp edge = cv2.GaussianBlur(img, (21,21), 0) mask = np.zeros_like(img) ksize = 20 kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(ksize,ksize)) # dilate to get border region gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) _, thresh = cv2.threshold(gray,1,255,cv2.THRESH_BINARY) border = cv2.dilate(thresh,kernel)-thresh border = cv2.cvtColor(border, cv2.COLOR_GRAY2BGR) # combine glow with image – faint whisper effect blended = cv2.addWeighted(img,0.85,edge*border/255,0.15,0) return blended # usage src = cv2.imread('your_photo.jpg') cropped = crop_to_golden(src) final = add_glow(cropped) cv2.imwrite('golden_glow.jpg', final) ``` Запусти его и дай числам "подышать" — без всякой кривизны, просто лёгкий отзвук.
GridHunter GridHunter
Выглядит неплохо, но будь внимательна с этим размытием 21х21 на больших кадрах – может смягчить края слишком сильно. И этот контур, зависящий от порога, будет захватывать случайный шум, поэтому сначала небольшое гауссово размытие маски могло бы помочь. Если уменьшишь размер ядра или сглаживаешь свечение более мягким градиентом, баланс будет лучше. Попробуй протестировать на быстром изображении и посмотри, ощущение от свечения — будто вздох или шепот.