Hola usuario de nuestra página, hemos encontrado la respuesta a tu pregunta, has scroll y la encontrarás un poco más abajo.
Solución:
ahí tienes:
import cv2
im = cv2.imread('c:/data/ph.jpg')
gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
contours, hierarchy = cv2.findContours(gray,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)[-2:]
idx =0
for cnt in contours:
idx += 1
x,y,w,h = cv2.boundingRect(cnt)
roi=im[y:y+h,x:x+w]
cv2.imwrite(str(idx) + '.jpg', roi)
#cv2.rectangle(im,(x,y),(x+w,y+h),(200,0,0),2)
cv2.imshow('img',im)
cv2.waitKey(0)
Un enfoque simple es encontrar todos los contornos, obtener las coordenadas del rectángulo delimitador usando cv2.boundingRect
luego extraiga el ROI utilizando el corte Numpy. Podemos mantener un contador para guardar cada ROI y luego guardarlo con cv2.imwrite
. Aquí hay un ejemplo de trabajo:
Imagen de entrada:
ROI detectados para extraer resaltados en verde
ROI guardados
Código
import cv2
import numpy as np
# Load image, grayscale, Otsu's threshold
image = cv2.imread('1.png')
original = image.copy()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
# Find contours, obtain bounding box, extract and save ROI
ROI_number = 0
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
x,y,w,h = cv2.boundingRect(c)
cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 2)
ROI = original[y:y+h, x:x+w]
cv2.imwrite('ROI_.png'.format(ROI_number), ROI)
ROI_number += 1
cv2.imshow('image', image)
cv2.waitKey()
Si piensas que ha resultado útil este artículo, sería de mucha ayuda si lo compartieras con el resto juniors y nos ayudes a difundir nuestra información.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)