我想用白色填充这些多边形,并且通过对整个图像的循环重复此操作,因此我想知道可用于在 python 中使用 opencv 执行此操作的语法和函数 这是我的输入图像
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)
Run Code Online (Sandbox Code Playgroud)
我使用了以下函数,结果如下:
cv2.floodFill(imo,None,(i,j),255)
Run Code Online (Sandbox Code Playgroud)
但我的问题是它在一定数量的多边形后为整个图像提供了白色闪光,我不知道如何修复它。
您可以使用cv2.drawContours()它来填充轮廓。从文档来看,如果thickness参数为负(thickness=CV_FILLED或thickness=-1),则轮廓将被填充。例如,用白色填充轮廓
cv2.drawContours(image, [c], -1, (255,255,255), -1)
Run Code Online (Sandbox Code Playgroud)
所以我们的想法是使用 找到所需的轮廓,cv2.findContours()然后使用 填充它cv2.drawContours()。对于您的形象:
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4704 次 |
| 最近记录: |