Comment aurais-je de la courbure du texte autour d'une image bords?

0

La question

Je suis en train de créer une image avec les bords remplacé par le texte, comme Cette vidéo sur Youtube miniature , mais à partir d'une image source. J'ai utilisé OpenCV pour obtenir une version d'une image source avec les bords et les taies d'Oreiller d'écrire le texte, mais je ne suis pas sûr où commencer quand il s'agit de manipuler le texte automatiquement pour s'adapter sur les bords. Le code que j'ai pour l'instant est:

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)

Ce code est juste pour la détection de bord et le déplacement de la détection des bords de l'Oreiller.

S'il vous plaît aider

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

La meilleure réponse

1

Je ne suis pas sûr de l'endroit où les "bords" vient de l'habile détecteur de bord.

Toutefois, la circulaire du texte peut être fait très simplement en Python/Baguette qui utilise ImageMagick. Ou on peut le faire en Python/OpenCV à l'aide de cv2.reconfigurer et de la transformation personnalisée de cartes.

Entrée:

enter image description here

1. Python Baguette

(la taille de sortie déterminé automatiquement à partir de la taille de l'image)

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)

Résultat:

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()

Résultat:

enter image description here

2021-11-24 23:59:34
0

Ni OpenCV ni PIL a un moyen de le faire, mais vous pouvez utiliser ImageMagick. Comment déformer une image pour prendre la forme de chemin avec python?

2021-11-24 23:52:41

Il y a certains renseignements très utiles sur ImageMagick distorsions ici... legacy.imagemagick.org/Usage/distorts/#circular_distorts notez Également que wand est le wrapper Python autour de ImageMagick docs.wand-py.org/en/0.6.7
Mark Setchell

Dans d'autres langues

Cette page est dans d'autres langues

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