Я хочу сгенерировать ограничивающие рамки для приблизительно несмежных областей фотографии по цветовой маске - в данном случае, с зелеными полосами, содержащими растительность, - чтобы я мог обрезать эту область, чтобы перейти к функции классификации изображений.
Это довольно легко сделать с помощью геопространственных растров, используя GDAL, для полигонизации областей геотифов, имеющих сходные характеристики (https://www.gdal.org/gdal_polygonize.html). Но в этом случае я пытаюсь сделать это с фотографией.Я не нашел решения для чистых растров.
Например, сделайте такую фотографию:
, чтозамаскированы под зеленые полосы с использованием openCV и numpy:
try:
hsv=cv.cvtColor(image,cv.COLOR_BGR2HSV)
except:
print("File may be corrupt")
return(0,0)
# Define lower and uppper limits of what we call "brown"
brown_lo=np.array([18,0,0])
brown_hi=np.array([28,255,255])
green_lo=np.array([29,0,0])
green_hi=np.array([88,255,255])
# Mask image to only select browns
mask_brown=cv.inRange(hsv,brown_lo,brown_hi)
mask_green=cv.inRange(hsv,green_lo,green_hi)
hsv[mask_brown>0]=(18,255,255)
hsv[mask_green>0]=(53,255,255)
image2=cv.cvtColor(hsv,cv.COLOR_HSV2BGR)
cv.imwrite(QUERIES + 'queries/mask.jpg', image2)
Я хотел бы создать боксы или полигоны для областей, указанных здесь:
Любые идеи, как это сделать?
Я пытался использовать контуры openCV и алгоритмы выпуклых оболочек, но они на самом деле не получают меняв любом месте:
threshold = val
# Detect edges using Canny
canny_output = cv.Canny(src_gray, threshold, threshold * 2)
# Find contours
_, contours, _ = cv.findContours(canny_output, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
# Find the convex hull object for each contour
hull_list = []
for i in range(len(contours)):
hull = cv.convexHull(contours[i])
hull_list.append(hull)
# Draw contours + hull results
drawing = np.zeros((canny_output.shape[0], canny_output.shape[1], 3), dtype=np.uint8)
for i in range(len(contours)):
color = (rng.randint(0,256), rng.randint(0,256), rng.randint(0,256))
cv.drawContours(drawing, contours, i, color)
cv.drawContours(drawing, hull_list, i, color)
# Show in a window
cv.imshow('Contours', drawing)