Я работаю над проектом, который предполагает манипулирование видеокадрами, и одно из требований — добавить к кадрам плавные закругленные углы. Я провел небольшое исследование того, как добавить к изображениям закругленные углы с помощью PIL или любой другой библиотеки обработки изображений, но все они создают неровные углы, которые выглядят непрофессионально. Вот код, который я пробовал: -
def add_corners(im, rad): круг = Image.new('L', (рад * 2, рад * 2), 0) нарисовать = ImageDraw.Draw(круг) draw.ellipse((0, 0, рад * 2 - 1, рад * 2 - 1), fill=255) альфа = Image.new('L', im.size, 255) w, h = im.size альфа.paste(circle.crop((0, 0, рад, рад)), (0, 0)) Alpha.paste(circle.crop((0, рад, рад, рад * 2)), (0, h - рад)) Alpha.paste(circle.crop((рад, 0, рад * 2, рад)), (w - рад, 0)) Alpha.paste(circle.crop((рад, рад, рад * 2, рад * 2)), (w - рад, h - рад)) im.putalpha(альфа) вернись, я im = Image.open('sand.png') im = round_corner_jpg(im, 50) im.save('sand_corner.png')

и вот результат, который он дает, как видно на изображении выше, углы неровные и имеют пиксельный вид, они не гладкие, как мы можем сделать на фигме, используя сглаживание углов IOS: -

Я также видел этот вопрос, который также имел те же требования, но они не показали код, как его реализовать: - Есть ли способ сделать красивые сглаженные закругленные углы для изображений в Python?
Я хочу убедиться, что при добавлении закругленных углов не происходит потери качества кадра, а углы должны быть гладкими и лучше, но при этом выглядеть как сглаживание углов на рис.
РЕДАКТИРОВАТЬ:-
out = cv2.VideoWriter('assets/pathToSave.mp4', fourcc, fps, (1920, 1080)) защитаgener_frame(): в то время как cap.isOpened(): код, кадр = cap.read() если код: рамка урожайности еще: печать("готово") перерыв для i кадр в перечислении (generate_frame()): # Конвертируем кадры opencv в изображение PIL img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) im_pil = Image.fromarray(img) сс = 4 альфа = Image.new('L', (im.width*ss, im.height*ss)) # Рисуем прямоугольник со скругленными углами и отменяем суперсэмпл d = ImageDraw.Draw(альфа) d.rounded_rectangle([0,0,im.width*ss-1,im.height*ss-1],radius=120,fill='white') альфа = альфа.resize((альфа.ширина//сс, альфа.высота//сс), resample=Image.Resampling.LANCZOS) Alpha.save('DEBUG-alpha.png') # Вставьте новый альфа-канал в исходное изображение и сохраните im_pil.putalpha(альфа) im_np = np.array(im_pil.convert('RGB')) open_cv_image = im_np[:, :, ::-1].copy() outputVideo.write(open_cv_image) Я попробовал приведенный выше код, чтобы получить закругленные углы входящих видеокадров, но углы все равно остались неровными :-

Пожалуйста, посмотрите на белую рамку: прозрачные закругленные углы являются частью фона, на котором отображается это видео.