使用Python OpenCV,如何提取特定颜色边界框内的图像区域?
给定一张我手动绘制彩色边界框的照片, 我想复制/裁剪图像内容,以将内容保留在边界框内 目标是检测颜色边界框,然后使用它告诉脚本复制/裁剪的位置 我尝试过轮廓,但似乎我需要额外的步骤 也许是一种方法:使用Python OpenCV,如何提取特定颜色边界框内的图像区域?,python,image,opencv,computer-vision,Python,Image,Opencv,Computer Vision,给定一张我手动绘制彩色边界框的照片, 我想复制/裁剪图像内容,以将内容保留在边界框内 目标是检测颜色边界框,然后使用它告诉脚本复制/裁剪的位置 我尝试过轮廓,但似乎我需要额外的步骤 也许是一种方法: 检测有界区域 找到最小的区域(框线可以是可变厚度的,因此我需要内部边界区域-边界最终将是物理世界中的彩色海报板剪切框) 脚本将为该区域创建一个遮罩 抓住图像 还有更好的办法; 最好的办法是什么? 我将使用哪些Python OpenCV方法 根据我目前的实验代码(我正在探索通过轮廓大小获得面积,但
- 检测有界区域
- 找到最小的区域(框线可以是可变厚度的,因此我需要内部边界区域-边界最终将是物理世界中的彩色海报板剪切框)
- 脚本将为该区域创建一个遮罩
- 抓住图像
green_MIN = np.array([45, 25, 25],np.uint8)
green_MAX = np.array([55, 255, 255],np.uint8)
hsv_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
frame_threshed = cv2.inRange(hsv_img, green_MIN, green_MAX)
#image = cv2.imread('...') # Load your image in here
# Your code to threshold
#image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 45, 0)
# Perform morphology
se = np.ones((20,20), dtype='uint8')
image_close = cv2.morphologyEx(frame_threshed, cv2.MORPH_CLOSE, se)
HSV值是一种痛苦;我想把那个部分自动化。
这有助于获得价值:
我的建议是: 1) 按颜色过滤,因为矩形为绿色。绿色也可能存在于图像本身中,但这将减少误报 2) 检测形成矩形的线条 现在,这可以通过多种方式实现。更通用的方法是使用Hough变换。我不知道有哪种实现可以直接搜索矩形,尽管您也可以实现它。该函数将查找线条,您可以选择形成矩形的线条
然而,在您的应用程序中,您可能有相当严格的假设,这将使这个问题变得更容易。如果边界框从未旋转过,则可以简单地在行和列上迭代,以查找具有所需颜色的最大像素数的行和列。可以扩展到查找相邻像素以查找线段,但甚至可能没有必要。您会特别推荐哪些方法来按颜色过滤?;我对openCV的深入了解还很陌生。我环顾了一下周围;颜色跟踪似乎有潜力,如果我知道如何适应静止图像,我将无法指望矩形永远不会旋转,但也许我可以找到线条,然后找到一定范围内的颜色,并从那里计算出来。但最简单的是最好的,这又取决于假设。你知道矩形颜色的精确RGB值吗?我通过颜色过滤获得了很好的效果;我更新了我原来的帖子。一个主要的痛苦是HSV的范围-范围应始终相同,因为将使用相同的颜色。
green_MIN = np.array([45, 25, 25],np.uint8)
green_MAX = np.array([55, 255, 255],np.uint8)
hsv_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
frame_threshed = cv2.inRange(hsv_img, green_MIN, green_MAX)
#image = cv2.imread('...') # Load your image in here
# Your code to threshold
#image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 45, 0)
# Perform morphology
se = np.ones((20,20), dtype='uint8')
image_close = cv2.morphologyEx(frame_threshed, cv2.MORPH_CLOSE, se)