我有许多图像,这些图像的边界框都以相同的颜色绘制,并且都是矩形。 如何在边界框内提取图像? 有类似的问题,但这些解决方案都没有正常工作。 有人可以帮忙吗? 下图是一个例子。 我想用python Opencv来做这件事。
修改------------------------------------------- -----------------------
此代码适用于所有图像。这是基于sipho的回答
img = cv2.imread(img_url)
hsv_min = np.array([0, 250, 100],np.uint8)
hsv_max = np.array([10, 255, 255],np.uint8)
hsv_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
frame_threshed = cv2.inRange(hsv_img, hsv_min, hsv_max)
# Perform morphology
se = np.ones((1,1), dtype='uint8')
image_close = cv2.morphologyEx(frame_threshed, cv2.MORPH_CLOSE, se)
cv2.imshow(image_close)
cv2.waitkey(0)
# detect contours on the morphed image
ret,thresh = cv2.threshold(image_close,127,255,0)
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
areaArray = []
for i, c in enumerate(contours):
area = cv2.contourArea(c)
areaArray.append(area)
# Sort countours based on area
sorteddata = sorted(zip(areaArray, contours), key=lambda x: x[0], reverse=True)
# find the nth largest contour [n-1][1], in this case 2
largestcontour = sorteddata[0][1]
# get the bounding rectangle of the contour
x, y, w, h = cv2.boundingRect(largestcontour)
cropped_img = img[y+3:y+h-3,x+3:x+w-3]
cv2.imshow('cropped', cropped_img)
cv2.waitkey(0)
答案 0 :(得分:1)
您可以尝试以下方法:
如果您仍然感到困惑,请查看此示例code