Вот изображение чека, которое у меня есть, и я нанес его с помощью matplotlib. Если вы видите изображение, текст на нем не прямой. Как я могу снять перекос и исправить это?
from skimage import io
import cv2
# x1, y1, x2, y2, x3, y3, x4, y4
bbox_coords = [[20, 68], [336, 68], [336, 100], [20, 100]]
image = io.imread('https://i.ibb.co/3WCsVBc/test.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
fig, ax = plt.subplots(figsize=(20, 20))
ax.imshow(gray, cmap='Greys_r')
# for plotting bounding box uncomment the two lines below
#rect = Polygon(bbox_coords, fill=False, linewidth=1, edgecolor='r')
#ax.add_patch(rect)
plt.show()
print(gray.shape)
(847, 486)
![receipt image](https://i.ibb.co/3WCsVBc/test.jpg)
Я думаю, что если мы хотим сначала снять перекос, мы должны найти края поэтому я попытался найти края с помощью алгоритма Кэнни, а затем получить контуры, как показано ниже.
from skimage import filters, feature, measure
def edge_detector(image):
image = filters.gaussian(image, 2, mode='reflect')
edges = feature.canny(image)
contours = measure.find_contours(edges, 0.8)
return edges, contours
fig, ax = plt.subplots(figsize=(20, 20))
ax.imshow(gray, cmap='Greys_r');
gray_image, contours = edge_detector(gray)
for n, contour in enumerate(contours):
ax.plot(contour[:, 1], contour[:, 0], linewidth=2)
Края, которые я получил из кода выше, - это края каждого текста, но это не то, что мне нужно , Мне нужно правильно получить края квитанции?
Также мне нужен способ получить координаты новой ограничительной рамки после де-смещения изображения (т.е. выпрямления изображения)?
Если кто-то работал по аналогичной проблеме, пожалуйста, помогите мне? Спасибо.