除一种颜色外的单个轮廓的边界框
Bounding boxes for individual contours except one color
我有一张图片如下
我想使用 OpenCV 为每个区域添加边界框,如下图所示 & Python
我现在如何找到轮廓是区域是一种颜色。但是,在这里我想找到所有非黑色区域的轮廓。我只是无法弄清楚。有人可以帮忙吗?
重新分级一些区域是不连续的区域(左边有2条垂直线),你可以忽略它。我会扩张并使它们连续。
如果我明白你想要什么,这里是 Python/OpenCV 中的一种方法。
- 读取输入
- 转换为灰色
- 黑白的门槛
- 查找外部轮廓及其边界框
- 在输入的副本上绘制边界框矩形
- 保存结果
输入:
import cv2
import numpy as np
# read image
img = cv2.imread('white_green.png')
# convert to grayscale
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# threshold
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY)[1]\
# get contour bounding boxes and draw on copy of input
contours = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
contours = contours[0] if len(contours) == 2 else contours[1]
result = img.copy()
for c in contours:
x,y,w,h = cv2.boundingRect(c)
cv2.rectangle(result, (x, y), (x+w-1, y+h-1), (0, 0, 255), 1)
# view result
cv2.imshow("threshold", thresh)
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()
# save result
cv2.imwrite("white_green_thresh.jpg", thresh)
cv2.imwrite("white_green_bboxes.jpg", result)
阈值图像:
边界框:
我有一张图片如下
我想使用 OpenCV 为每个区域添加边界框,如下图所示 & Python
我现在如何找到轮廓是区域是一种颜色。但是,在这里我想找到所有非黑色区域的轮廓。我只是无法弄清楚。有人可以帮忙吗?
重新分级一些区域是不连续的区域(左边有2条垂直线),你可以忽略它。我会扩张并使它们连续。
如果我明白你想要什么,这里是 Python/OpenCV 中的一种方法。
- 读取输入
- 转换为灰色
- 黑白的门槛
- 查找外部轮廓及其边界框
- 在输入的副本上绘制边界框矩形
- 保存结果
输入:
import cv2
import numpy as np
# read image
img = cv2.imread('white_green.png')
# convert to grayscale
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# threshold
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY)[1]\
# get contour bounding boxes and draw on copy of input
contours = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
contours = contours[0] if len(contours) == 2 else contours[1]
result = img.copy()
for c in contours:
x,y,w,h = cv2.boundingRect(c)
cv2.rectangle(result, (x, y), (x+w-1, y+h-1), (0, 0, 255), 1)
# view result
cv2.imshow("threshold", thresh)
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()
# save result
cv2.imwrite("white_green_thresh.jpg", thresh)
cv2.imwrite("white_green_bboxes.jpg", result)
阈值图像:
边界框: