Проще говоря, может помочь увеличение изображения, поскольку оно увеличивает темную границу числа.
Я собрал некоторый код, который делает это.Результат можно улучшить, но я хочу показать, что 4 теперь можно определить как контур.Для повышения эффективности я выбрал только контуры в пределах определенного размера.
Кроме того, поскольку он является частью HUD, это обычно означает, что местоположение на экране всегда одинаково.Если это так, вы можете добиться значительного увеличения производительности, только выбрав область со значениями (описано здесь ) - как я сделал вручную.
Наконец, поскольку числа имеют согласованную форму, вы можете попробовать matchShapes в качестве альтернативы kNN для распознавания чисел.Я не знаю, как они сравниваются по производительности, поэтому вам придется попробовать это самим.
Результат:
Код:
import numpy as np
import cv2
# load image
img = cv2.imread("fn2.JPG")
# enlarge image
img = cv2.resize(img,None,fx=4, fy=4, interpolation = cv2.INTER_CUBIC)
# convert to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
# create mask using threshold
ret,mask = cv2.threshold(gray,200,255,cv2.THRESH_BINARY)
# find contours in mask
im, contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# draw contour on image
for cnt in contours:
if cv2.contourArea(cnt) < 3000 and cv2.contourArea(cnt) > 200:
cv2.drawContours(img, [cnt], 0, (255,0,0), 2)
#show images
cv2.imshow("Mask", mask)
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()