Как заточить края в opencv python - PullRequest
0 голосов
/ 28 марта 2020

Я изучаю обработку изображений, в которой я пытаюсь заострить края изображений с помощью opencv в python, я максимально уменьшил шум, но теперь я хочу сделать края изображения более четкими Я попробовал cv2.Canny(), но это не сработало.

это изображение

enter image description here

После применения c2.Canny ()

enter image description here

но я пытаюсь уточнить границы или края слов

это мой код

import cv2
import matplotlib.pyplot as plt
img_1 = cv2.imread('noise/1.png',cv2.IMREAD_GRAYSCALE)
edges = cv2.Canny(img_1,200,200)
plt.imshow(edges)

Ответы [ 2 ]

2 голосов
/ 28 марта 2020

Вот один из способов справиться с этим в Python / OpenCV.

  • Считать ввод в градациях серого
  • Порог, чтобы убедиться, что он двоичный
  • Применить морфология закрыть
  • Найти контуры и удалить все небольшие области на входе, закрасив их черным
  • Применить обнаружение краев Канни
  • Сохранить результаты

Ввод:

enter image description here

import cv2
import numpy as np

# read image as grayscale
img = cv2.imread('K.png', cv2.IMREAD_GRAYSCALE)

# threshold to binary
thresh = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY)[1]

# apply morphology
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))
morph = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)

# find contours - write black over all small contours
letter = morph.copy()
cntrs = cv2.findContours(morph, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cntrs = cntrs[0] if len(cntrs) == 2 else cntrs[1]
for c in cntrs:
    area = cv2.contourArea(c)
    if area < 100:
        cv2.drawContours(letter,[c],0,(0,0,0),-1)

# do canny edge detection
edges = cv2.Canny(letter, 200, 200)

# write results
cv2.imwrite("K_thresh.png", thresh)
cv2.imwrite("K_morph.png", morph)
cv2.imwrite("K_letter.png", letter)
cv2.imwrite("K_edges.png", edges)

# show results
cv2.imshow("K_thresh", thresh)
cv2.imshow("K_morph", morph)
cv2.imshow("K_letter", letter)
cv2.imshow("K_edges", edges)
cv2.waitKey(0)


С пороговым изображением:

enter image description here

Морфология Открыто применено:

enter image description here

Удалены небольшие участки:

enter image description here

Края:

enter image description here

0 голосов
/ 28 марта 2020

Сначала удалите шум изображения с помощью Gaussian blur и используйте автоматическое пороговое значение canny, как показано ниже:

def auto_canny(image, sigma=0.33):
    v = np.median(image)
    lower = int(max(0, (1.0 - sigma) * v))
    upper = int(min(255, (1.0 + sigma) * v))
    edged = cv2.Canny(image, lower, upper)
    return edged

def main():
    img_1 = cv2.imread('noise/1.png',cv2.IMREAD_GRAYSCALE)
    blurred = cv2.GaussianBlur(img_1, (3, 3), 0)
    auto_edge = auto_canny(blurred)
    plt.imshow(auto_edge)

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...