Я хочу, чтобы был способ автоматически обнаруживать и корректировать перекос изображения чека, я пытался найти дисперсию между строками для различных углов поворота и выбрать угол, который имеет максимальную дисперсию.Для вычисления дисперсии я сделал следующее:
1. Для каждой строки я вычислил сумму значений пикселей и сохранил ее в списке.
2. Найдем дисперсию списка, используяnp.var(list)
src = cv.imread(f_name, cv.IMREAD_GRAYSCALE)
blurred=median = cv.medianBlur(src,9)
ret,thresh2 = cv.threshold(src,127,255,cv.THRESH_BINARY_INV)
height, width = thresh2.shape[:2]
print(height,width)
res=[-1,0]
for angle in range(0,100,10):
rotated_temp=deskew(thresh2,angle)
cv.imshow('rotated_temp',rotated_temp)
cv.waitKey(0)
height,width=rotated_temp.shape[:2]
li=[]
for i in range(height):
sum=0
for j in range(width):
sum+=rotated_temp[i][j]
li.append(sum)
curr_variance=np.var(li)
print(curr_variance,angle)
if(curr_variance>res[0]):
res[0]=curr_variance
res[1]=angle
print(res)
final_rot=deskew(src,res[1])
cv.imshow('final_rot',final_rot)
cv.waitKey(0)
Однако дисперсия для искаженного изображения становится больше, чем правильно выровненное изображение, есть ли способ исправить эту
дисперсиюдля изображения, выровненного по горизонтали (обязательно): 122449908.009789
дисперсия для изображения, выровненного по вертикали: 1840071444.404522
Я пробовал использовать HoughLines. Однако, поскольку расстояние между текстом слишком мало, обнаруживаются вертикальные линии, следовательно, это также не удается
Любые модификации или другие подходы приветствуются