У меня есть код ниже, который идентифицирует край текстового изображения. Входное изображение:
Выходное изображение:
Я хочу выбрать случайные точки возле границы края текста. Я думал определить, является ли краевой пиксель частью горизонтальной или вертикальной линии. Если это часть горизонтальной линии, я могу выбрать вертикальную случайную точку, иначе, если краевой пиксель является частью вертикальной линии, тогда я могу выбрать случайную горизонтальную точку. Как это сделать в Python? Кроме моей логики c, есть ли лучший способ выбрать случайные точки? Ниже мой исходный код:
from PIL import Image
from matplotlib import pyplot as plt
import numpy as np
import cv2
image_counter = 1
path = 'sample/' + str(image_counter) + '.png'
image = Image.open(path).convert('L')
image_width, image_height = image.size
image = np.array(image)
sigma = .33
# compute the median of the single channel pixel intensities
v = np.median(image)
# apply automatic Canny edge detection using the computed median
lower = int(max(0, (1.0 - sigma) * v))
upper = int(min(255, (1.0 + sigma) * v))
#Edge Detection
edge_image = cv2.Canny(image,lower,upper)
plt.subplot(121),plt.imshow(image,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edge_image,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])
plt.show()
#Select random points outside text borders
#Select random points outside text borders
for x in range(image_width):
for y in range(image_height):
if (edge_image[x][y] == 255):
#Check if the edge pixel is part of the horizontal or vertical line.
#If part of the horizontal line, pick a random point vertically.
#If part of the vertical line, pick a random point horizontally.
# How to do it?
Желаемый вывод: