¿Cómo puedo deformar texto alrededor de una imagen de bordes?

0

Pregunta

Estoy tratando de crear una imagen con los bordes reemplazado con el texto, similar a la de Este vídeo de Youtube en miniatura , pero a partir de una imagen de origen. He usado OpenCV para obtener una versión de una fuente de la imagen con los bordes, y una Almohada para escribir el texto, pero no estoy seguro de por dónde empezar a la hora de manipular el texto automáticamente para que se ajuste a los bordes. El código que tengo hasta ahora es:

import cv2 as cv
from matplotlib import pyplot as plt
from PIL import Image, ImageFont, ImageDraw, ImageShow

font = ImageFont.truetype(r"C:\Users\X\Downloads\Montserrat\Montserrat-Light.ttf", 12)
text = ["text", "other text"]

img = cv.imread(r"C:\Users\X\Pictures\picture.jpg",0)
edges = cv.Canny(img,100,200)

img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
im_pil = Image.fromarray(edges)

Este código es sólo para la detección de bordes y moviendo la detecta los bordes de la Almohada.

Por favor ayuda

image opencv python
2021-11-24 03:40:23
2

Mejor respuesta

1

No estoy seguro de donde los "bordes" viene desde el detector de bordes canny.

Sin embargo, la circular de ajuste de texto se puede hacer muy fácilmente en Python/Varita que utiliza ImageMagick. O uno puede hacer eso en Python/OpenCV utilizando cv2.de reasignación y de transformación personalizado mapas.

Entrada:

enter image description here

1. Python Varita

(tamaño de salida se determina de forma automática de tamaño de entrada)

from wand.image import Image
from wand.font import Font
from wand.display import display

with Image(filename='some_text.png') as img:
    img.background_color = 'white'
    img.virtual_pixel = 'white'
    # 360 degree arc, rotated 0 degrees
    img.distort('arc', (360,0))
    img.save(filename='some_text_arc.png')
    img.format = 'png'
    display(img)

Resultado:

enter image description here

2. Python/OpenCV

import numpy as np
import cv2
import math

# read input
img = cv2.imread("some_text.png")
hin, win = img.shape[:2]
win2 = win / 2

# specify desired square output dimensions and center
hout = 100
wout = 100
xcent = wout / 2
ycent = hout / 2
hwout = max(hout,wout)
hwout2 = hwout / 2

# set up the x and y maps as float32
map_x = np.zeros((hout, wout), np.float32)
map_y = np.zeros((hout, wout), np.float32)

# create map with the arc distortion formula --- angle and radius
for y in range(hout):
    Y = (y - ycent)
    for x in range(wout):
        X = (x - xcent)
        XX = (math.atan2(Y,X)+math.pi/2)/(2*math.pi)
        XX = XX - int(XX+0.5)
        XX = XX * win + win2
        map_x[y, x] = XX
        map_y[y, x] = hwout2 - math.hypot(X,Y)

# do the remap  this is where the magic happens
result = cv2.remap(img, map_x, map_y, cv2.INTER_CUBIC, borderMode = cv2.BORDER_CONSTANT, borderValue=(255,255,255))

# save results
cv2.imwrite("some_text_arc.jpg", result)

# display images
cv2.imshow('img', img)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

Resultado:

enter image description here

2021-11-24 23:59:34
0

Ni OpenCV ni PIL tiene una manera de hacerlo, pero usted puede usar ImageMagick. Cómo deformar una imagen a tomar forma de ruta con python?

2021-11-24 23:52:41

Hay algunos muy útil la información sobre ImageMagick distorsiones aquí... legacy.imagemagick.org/Usage/distorts/#circular_distorts También, tenga en cuenta que wand es el Python envoltura alrededor de ImageMagick docs.wand-py.org/en/0.6.7
Mark Setchell

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................