【发布时间】:2019-10-25 18:58:07
【问题描述】:
我有一张这样的图片:
而且我想在红色的任何地方裁剪图像。
所以有了这张图片,我会希望生产 4 种作物:
显然,我首先需要检测图像中任何有红色的地方。我可以做到以下几点:
import cv2
import numpy as np
from google.colab.patches import cv2_imshow
## (1) Read and convert to HSV
img = cv2.imread("my_image_with_red.png")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
## (2) Find the target red region in HSV
hsv_lower = np.array([0,50,50])
hsv_upper = np.array([10,255,255])
mask = cv2.inRange(hsv, hsv_lower, hsv_upper)
## (3) morph-op to remove horizone lines
kernel = np.ones((5,1), np.uint8)
mask2 = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
## (4) crop the region
ys, xs = np.nonzero(mask2)
ymin, ymax = ys.min(), ys.max()
xmin, xmax = xs.min(), xs.max()
croped = img[ymin:ymax, xmin:xmax]
pts = np.int32([[xmin, ymin],[xmin,ymax],[xmax,ymax],[xmax,ymin]])
cv2.drawContours(img, [pts], -1, (0,255,0), 1, cv2.LINE_AA)
cv2_imshow(croped)
cv2_imshow(img)
cv2.waitKey()
这给出了以下结果:
边界框覆盖了包含红色的整个区域。
如何在图像的每个红色部分周围设置边界框?我已经研究了 multiple mask 但这似乎不起作用。
我要找的是:
- 检测 每个图像中的红点;
- 在每个红点上返回边界;
- 使用这些边界生成 4 个单独的作物作为新图像。
【问题讨论】:
-
把所有不是红色的都变成黑色。把红色的一切都变成白色。现在找到轮廓。当你拥有它们时,在原始图像上使用它们。
标签: python image opencv image-processing computer-vision