用Python的openCV库,获取封闭曲线所在的区域

3

我正在使用Python绑定的openCV,并可以将鼠标用作画笔。假设我有以下图像,并且我想获取蓝色曲线内的所有颜色。enter image description here

我原本认为我可以将所有坐标保存到列表中,如果追加了已经存在的点,则获取封闭区域。

但是,我该如何做到这一点,或者至少是否可能? 谢谢!


编辑:

我已经使用了@Arijit Mukherjee建议的方法,我得到了以下结果: enter image description here

现在我怎样才能获取轮廓内的所有颜色?一个不切实际的解决方案是解析掩模图像的每个像素,并创建一个集合。 我该如何用另一种方式做到这一点?


你想知道如何在OpenCV中绘制蓝色轮廓,或者如何获取内部的颜色吗?至少有可能吗?是的! - Miki
我想知道如何获取图像中的颜色,并消除除此之外的所有颜色。 - dimmg
1个回答

2

假设区域是通过鼠标单击选择的,请按照以下步骤进行操作:

  1. 读取原始图像
  2. 创建掩码
  3. 对两个图像执行位与操作

enter image description here

示例代码:

import cv2
import numpy as np

# original image
image = cv2.imread('image.png')

# mask (of course replace corners with yours)
mask = np.zeros(image.shape, dtype=np.uint8)
roi_corners = np.array(points, dtype=np.int32) #pointsOf the polygon Like [[(10,10), (300,300), (10,300)]]
white = (255, 255, 255)
cv2.fillPoly(mask, roi_corners, white)

# apply the mask
masked_image = cv2.bitwise_and(image, mask)

# display your handywork
cv2.imshow('masked image', masked_image)
cv2.waitKey()
cv2.destroyAllWindows()

编辑

为了找到ROI的颜色,您可以根据需要使用以下两种方法之一:

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(imgray,mask = mask)
mean_val = cv2.mean(im,mask = mask)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接