Python 如何检测图像中的不规则形状并为其内部增加价值?

Python 如何检测图像中的不规则形状并为其内部增加价值?,python,opencv,image-processing,computer-vision,contour,Python,Opencv,Image Processing,Computer Vision,Contour,有两个图像,一个是有值的原始图像,另一个叫形状图像,形状不规则。我想检测形状,并将不同的值添加到值img,对应于形状img。形状不会相互相交。 我一直在研究多个LIB,包括OpenCV2,但发现很难实现这个目标。有人能帮忙吗?谢谢 可能形状图像 我希望从外部到内部交替添加+1/-1 要检测形状,可以使用和cv2.RETR\u树标志。为了确定内部轮廓,我们可以使用层次对每个内层进行过滤。这里有一个很好的教程。基本上,我们迭代每个层并交替标记每个轮廓(-1或1)。要添加标签,可以使用。根据所使用

有两个图像,一个是有值的原始图像,另一个叫形状图像,形状不规则。我想检测形状,并将不同的值添加到值img,对应于形状img。形状不会相互相交。 我一直在研究多个LIB,包括OpenCV2,但发现很难实现这个目标。有人能帮忙吗?谢谢

可能形状图像

我希望从外部到内部交替添加+1/-1

要检测形状,可以使用和
cv2.RETR\u树
标志。为了确定内部轮廓,我们可以使用层次对每个内层进行过滤。这里有一个很好的教程。基本上,我们迭代每个层并交替标记每个轮廓(
-1
1
)。要添加标签,可以使用。根据所使用的图像,可能必须更改标签的偏移

这是结果



大概您使用了
cv2.findContours()
,所以请展示您的代码。请阅读本论坛的帮助部分,了解如何编写好的问题。谢谢,层次结构确实是我需要的。然而,我给出的图片有误导性,我的意图是让形状内的所有像素值(作为二维数组的img)增加+1/-1。我应该使用泛洪填充吗?是的,这将是一种潜在的方法
import cv2

image = cv2.imread('1.png')

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray,120, 255,cv2.THRESH_BINARY_INV)[1]
cnts, h = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

label = '1'
count = 0

# Get inner list of hierarchy
for layer in zip(cnts, h[0]):
    contour = layer[0]
    hierarchy = layer[1]

    # If we find new contour (not inner) reset label
    if hierarchy[1] >= 0:
        label = '1'
    # Ensure that we only have outer contour
    if count % 2 == 0:
        cv2.drawContours(image, [contour], -1, (36, 255, 12), 2)
        x,y,w,h = cv2.boundingRect(contour)
        cv2.putText(image, label, (x +50,y+ 70), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (36,255,12), 3)
        label = str(int(label) * -1)

    count += 1

cv2.imshow('thresh', thresh)
cv2.imshow('image', image)
cv2.waitKey()