我有一个二进制图像,描绘人类为白色斑点,背景为黑色。我想" crop"使用opencv的大图像中最大的(或最大的3个)斑点。
怎么会这样做呢?
答案 0 :(得分:0)
我不确定您是否找到了答案,但这是基于我理解的您的要求的代码的基本结构。您可以根据需要进行修改。
import numpy as np
import cv2
# load the image
image = cv2.imread("path_to_your_image.png") # if this not a binary image, you can threshold it
output = image.copy()
im2,contours,hierarchy = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
if len(contours) != 0:
# the contours are drawn here
cv2.drawContours(output, contours, -1, 255, 3)
#find the biggest area of the contour
c = max(contours, key = cv2.contourArea)
x,y,w,h = cv2.boundingRect(c)
# draw the 'human' contour (in green)
cv2.rectangle(output,(x,y),(x+w,y+h),(0,255,0),2)
# show the image
cv2.imshow("Result", output)
cv2.waitKey(0)
注意: x,y,x + w和y + h为您提供框的范围,因此使用这些值可以获得最大blob的感兴趣区域。 / p>
希望这有帮助!