обрезать границы изображения питона - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть эта картинка enter image description here

, и я хочу обрезать ее вот так enter image description here

Я использую этот код,но это не обрезает черную границу.Итак, кто-нибудь может мне помочь?

    im = cv2.imread("Data/"+file, 0)
    retval, thresh_gray = cv2.threshold(im, thresh=100, maxval=255, type=cv2.THRESH_BINARY)
    points = np.argwhere(thresh_gray==0)
    points = np.fliplr(points)
    x, y, w, h = cv2.boundingRect(points)
    crop = im[y:y+h, x:x+w] # create a crop
    retval, thresh_crop = cv2.threshold(crop, thresh=200, maxval=255, type=cv2.THRESH_BINARY)
    path = 'D:\Picture\Camera Roll'
    cv2.imwrite(os.path.join(path , file),thresh_crop)

1 Ответ

0 голосов
/ 09 декабря 2018

Я думаю, вы можете использовать контуры для вашего решения. Контуры - это кривая / линия, соединяющая непрерывные точки одинаковой интенсивности.Таким образом, коробка, в которой написан сценарий, представляет собой один контур.Контуры в изображении также имеют отношения, как один контур может быть родителем другого контура (ов).В вашем изображении поле может быть родительским для написанного сценария.

cv2.findContours находит все контуры в изображении, а второй параметр (cv2.RETR_TREE) указывает, какой тип отношений должен быть возвращен,Поскольку у контуров есть иерархия, вполне вероятно, что блок будет в индексе 0 или 1 из списка контуров.

import matplotlib.pyplot as plt
%matplotlib inline
img = cv2.imread('image.png', 0)
ret, thresh = cv2.threshold(img, 127, 255, 0)
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

enter image description here

Хотя первый контур (контуры [0]) будет представлять собой прямоугольник, но по какой-то причине это второй.

img_copy = img.copy()
cnt= contours[1]
cv2.drawContours(img_copy, [cnt], -1, color = (255, 255, 255), thickness = 20)
plt.imshow(img_copy, 'gray')

enter image description here

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

Не беспокойтесь о ограничительной рамке на этих изображениях.Это просто матплотлиб.Ваше изображение - это то, что находится внутри поля координат.

...