Есть ли какая-нибудь функция для обрезки бинарного изображения в opencv или других пакетах? - PullRequest
0 голосов
/ 31 января 2019

Я просто работаю с изображениями, и мне трудно автоматически обрезать двоичные изображения.Я новичок в обработке изображений.Примеры изображений показаны ниже,

Исходное изображение:

enter image description here

Необходимый вывод (вручную отредактированный редактором изображений GIMP):

enter image description here

Мне нужно было обрезать изображение, найдя края пикселей (маски) на изображении.Но трудно найти приблизительные края.Пожалуйста, помогите мне узнать.

заранее спасибо ..!

1 Ответ

0 голосов
/ 31 января 2019

Вы можете использовать findContours, чтобы найти границу объекта, затем используйте minAreaRect, чтобы нарисовать нужный вывод, 1-е изображение.Или вы можете просто нарисовать границы объекта, 2-е изображение.

import cv2
import numpy as np

img = cv2.imread('1.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

_,thresh = cv2.threshold(gray,128,255,cv2.THRESH_BINARY)

_,contours,_ = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

mask = np.zeros(img.shape)

cv2.drawContours(mask, contours, -1 , (255,255,255), 1)

rect = cv2.minAreaRect(contours[0])
box = cv2.boxPoints(rect)

box = np.int0(box)
cv2.drawContours(img,[box],0,(255,255,255),1)

cv2.imshow("img",img)
cv2.imshow("mask",mask)
cv2.waitKey(0)
cv2.destroyAllWindows()

enter image description here

enter image description here

...