首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用opencv python填充多边形

如何使用opencv python填充多边形
EN

Stack Overflow用户
提问于 2019-08-27 07:21:37
回答 1查看 7.4K关注 0票数 8

我想用白色填充这些多边形,这个操作是通过对整个图像的循环重复的,所以我想知道可以使用python中的opencv来执行这个操作的语法和函数,这是我的输入图像。

代码语言:javascript
复制
alist=[]
img = cv2.imread('closing2.jpg',cv2.IMREAD_GRAYSCALE)
imo = cv2.imread('closing2.jpg',cv2.IMREAD_GRAYSCALE)
imr = cv2.imread('closing2.jpg',cv2.IMREAD_GRAYSCALE)*0
imac = imr
height , width  = imo.shape[:2]
a,im = cv2.threshold(img,200,255,cv2.THRESH_BINARY)
# i=100
# p=[i,i]
points = []
for j in range(0,1000,50):
    for i in range(0,1000,50):
        p=[i,j]
        poly = raypoly(im,p,5)
        st = metrics(p,poly)

        polyc=raypolyLimit(im,p,st,30)
        # print(polyc)
        # print(len(polyc))
        # for m in range(len(polyc)):
        #     point = polyc[m]
        #     cv2.fillConvexPoly(im, point, 255)
        plotpoly(polyc,imr)

        plotpolypoints(polyc,imr,255,1)
        # plotray(im,p,imr)

        am = polyArea(polyc)
        # print(am)
        if am > 5:
            alist.append(am)
            # img[(i-5):(i+5),(j-5):(j+5)]=150
            # plt.imshow(imf)
            # plt.show()
        imo = im * 0
        plotpoly(polyc,imo)
        plotpoly(polyc, im)
        # plotArea(polyc,imo)
        imf = imo*1000 +im
        a,imf = cv2.threshold(imf,100.0,255.0,cv2.THRESH_BINARY)
        cv2.imshow('Frame_1', imr)
        cv2.imshow('Frame_3', imo)
        cv2.imshow('Frame_4', imf)
        cv2.imshow('Frame_5', im)
        cv2.waitKey(1)

我使用了以下函数,其结果如下:

代码语言:javascript
复制
cv2.floodFill(imo,None,(i,j),255)

但我的问题是,它给整个图像的白色闪光灯后,一定数量的多边形,我不知道如何修复它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-27 21:20:17

您可以使用cv2.drawContours()来填充轮廓。从文档中,如果thickness参数为负值(thickness=CV_FILLEDthickness=-1),则将填充等高线。例如,用白色填充等高线

代码语言:javascript
复制
cv2.drawContours(image, [c], -1, (255,255,255), -1)

因此,我们的想法是使用cv2.findContours()找到所需的轮廓,然后使用cv2.drawContours()填充它。为了你的形象:

代码语言:javascript
复制
import cv2

image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 120, 255, cv2.THRESH_BINARY)[1]
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

for c in cnts:
    cv2.drawContours(image, [c], -1, (255,255,255), -1)

cv2.imshow('image', image)
cv2.waitKey()
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57669562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档