Как определить контур замкнутого прямоугольника с показаниями одометра в python opencv? - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь использовать cv2 для определения показаний одометра - я пытаюсь выделить контур, где присутствуют показания одометра. Я не могу точно определить регион. Я пытаюсь получить контур области / прямоугольника из изображения. Код для макс области из региона. Может ли кто-нибудь помочь мне здесь?

Ниже приведен код

import numpy as np
import matplotlib.pyplot as plt 

# assuming you have the result image store in median
median = cv2.imread("odo_2.jpg", 0)
image_gray = median

binary = cv2.bitwise_not(image_gray)
edged = cv2.Canny(binary, 50, 80, 255)

#threshold = cv2.adaptiveThreshold(edged,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)



contours = cv2.findContours(edged, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)[-2]



rect_cnts = []
for cnt in contours:
    peri = cv2.arcLength(cnt, True)
    approx = cv2.approxPolyDP(cnt, 0.04 * peri, True)
    (x, y, w, h) = cv2.boundingRect(cnt)
    ar = w / float(h)
    if (len(approx) == 4) & (ar >= 0.95 and ar <= 1.05) : # shape filtering condition
        pass 
    else :
        rect_cnts.append(cnt)


max_area = 0
football_square = None
for cnt in rect_cnts:
    (x, y, w, h) = cv2.boundingRect(cnt)
    if max_area < w*h:
        max_area = w*h
        football_square = cnt

# Draw the result
image = cv2.cvtColor(image_gray, cv2.COLOR_GRAY2RGB)
cv2.drawContours(image, [football_square], -1, (0, 0,255), 3)
cv2.imshow("Result Preview", image)
#cv2.imshow("Result Preview", edged)
cv2.waitKey(0)

Image Input

Ответы [ 2 ]

1 голос
/ 03 мая 2020
import cv2 as cv
low_H = 8
low_S = 106
low_V = 156
high_H = 25
high_S = 231
high_V = 237
frame = cv.imread('J.jpg')
frame_HSV = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
frame_threshold = cv.inRange(frame_HSV, (low_H, low_S, low_V), (high_H, high_S, high_V))
cv.imwrite('out_odo.png', frame_threshold)

Результат: enter image description here

0 голосов
/ 03 мая 2020

Вам нужны значения или вы хотите научиться обрабатывать изображения? Если это первый случай, я предлагаю вам попробовать другой подход.

  1. Может быть небольшая вероятность, что вы можете подключиться к микроконтроллеру, управляющему ЖК-дисплеем. Возможно, на плате есть какой-то штекер или несколько контактов для этого. Возможно, вы можете использовать I2 C или SPI для получения значений.

  2. Если вам нужно оцифровать аналоговые инструменты и вы не можете взломать чип, управляющий ЖК-дисплеем, вы настроили очень «контролируемая среда» для чтения изображения. В вашем случае это будет означать построить темный корпус вокруг одометра и использовать подсветку ЖК-дисплея в качестве единственного источника света. Таким образом, нет никаких размышлений, et c. Затем прикрепите камеру к корпусу и убедитесь, что вы получаете четкое изображение. В этом изображении захватите ЖК-дисплей, используя фиксированную область, и введите его в алгоритм распознавания. На этом ЖК-шрифте есть функции распознавания текста, которые работают как шарм.

...