Есть ли способ обнаружить маленькие линии, используя пороговую функцию в opencv - PullRequest
0 голосов
/ 28 июня 2019

Я хочу прочитать сильно сжатое изображение в формате JPEG и преобразовать его в более четкое пороговое изображение, например:

Входное изображение

jpeg image

К хорошему пороговому изображению

good threshold image

но из-за сжатия в формате jpeg изображение имеет меньшие строки, поэтому пороговое значение будет таким:

Плохое пороговое изображение

bad threshold image

Я хочу иметь изображение, на котором также есть меньшие линии, так как бы я это сделал?

сейчас я использую функцию порога opencv, чтобы сделать изображение черно-белым, а затем использую эрозию, чтобы сделать линии немного больше.

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    (thresh, BlackWhite) = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
    kernel = np.ones((4, 4),np.uint8)
    erosion = cv2.erode(BlackWhite, kernel,iterations = 1)
    cv2_imshow(erosion)

1 Ответ

0 голосов
/ 28 июня 2019

Я написал этот код для ваших вопросов, попробуйте, он будет хорошо работать с вами :)

 def auto_canny(image, sigma=0.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))
        edged = cv2.Canny(image, lower, upper)

        # return the edged image
        return edged

    image = cv2.imread('asd.jpg')
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    blur = cv2.GaussianBlur(gray, (1,1), 0)
    edges = auto_canny(blur)
    thresh = cv2.threshold(edges, 3, 255,cv2.ADAPTIVE_THRESH_MEAN_C | cv2.THRESH_OTSU)[1]
    cv2.imshow('thres',thresh)
    cv2.waitKey()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...