如果只是想擼代碼,直接看下一篇:
https://blog.csdn.net/HaoZiHuang/article/details/127027469
先來(lái)鋪墊幾個(gè)用到的函數(shù)cv2.polylines
、cv2.fillPoly
以下內(nèi)容部分摘自:
http://www.juzicode.com/opencv-python-polylines-puttext
先看一下代碼吧:
import cv2
import numpy as np
img = np.zeros((512,512,3)) #白色背景
color=(0,255,0) #綠色
# ------ 五角星的頂點(diǎn) ------
pts = np.array([[70,190],
[222,190],
[280,61],
[330,190],
[467,190],
[358,260],
[392,380],
[280,308],
[138,380],
[195,260]])
# pts = pts.reshape((-1, 1, 2)) # reshape為 10x1x2 的 numpy.ndarray
print(pts.shape) # (10, 1, 2)
# ------ 繪制圖形 ------
cv2.polylines(img,
# [pts-20, pts+30],
[pts],
True, # 是否閉合
color,
5)
# ------ 以下是顯示三件套 ------
cv2.imshow('show',img)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.polylines
的參數(shù):
- 繪制的畫板圖
- 繪制的多邊形列表
- 是否閉合的bool
- 顏色
- 粗細(xì)
- 這是第三個(gè)參數(shù)為 True (閉合) / False(不閉合) 的圖:
不過有些標(biāo)注的最后一個(gè)點(diǎn)和第一個(gè)點(diǎn)是相同的,這種情況下 False/True 都不影響,都會(huì)是閉合的,因?yàn)樽詈笠粋€(gè)點(diǎn)和第一個(gè)點(diǎn)相同
- 第四個(gè)參數(shù)是顏色注意是 BGR 的形式,
(0, 0, 255)
是紅色 - 第五個(gè)參數(shù)是粗細(xì),注意不能像畫圓那樣給 -1 來(lái)填充多邊形,多邊形填充有專用的函數(shù)
cv2.fillPoly
- 接下來(lái)是最值得說的第二個(gè)參數(shù),為啥是
[pts]
呢? 為啥是個(gè)列表呢? 要不我改成[pts1, pts2]
試試?
每次,這里就是可以傳入多個(gè)形如[X, 1, 2]
的 np.ndarray
我們這樣做個(gè)實(shí)驗(yàn):cv2.polylines(img, [pts-20, pts+30], True, # 是否閉合 color, 5)
這樣就繪制了兩個(gè)多邊形,但是顏色都是一樣的,所以要繪制多個(gè)不同顏色的多邊形,還是多次調(diào)用這個(gè)函數(shù),而不是在這個(gè)列表傳入多個(gè)array
- 代碼里有一行這個(gè):
我注釋掉了,我看好多人的博客,都有這一行,我就我試了一下不用這個(gè)操作,結(jié)果可以運(yùn)行,有這個(gè)操作還是可以運(yùn)行,就有些離譜吧,可能 opencv 舊版本需要這個(gè)操作???# pts = pts.reshape((-1, 1, 2)) # reshape為 10x1x2 的 numpy.ndarray
OKOK, 終于把 cv2.polylines
說完了,接下來(lái)說這個(gè) cv2.fillPoly
, 他的用法就比較簡(jiǎn)單了:
import cv2
import numpy as np
img = np.zeros((512,512,3)) #白色背景
color=(0,0,255) # 紅色
#五角星
pts = np.array([[70,190],
[222,190],
[280,61],
[330,190],
[467,190],
[358,260],
[392,380],
[280,308],
[138,380],
[195,260],
[70,190]])
cv2.fillPoly(img, # 原圖畫板
[pts], # 多邊形的點(diǎn)
color=(0, 0, 255))
cv2.imshow('show',img)
cv2.waitKey()
簡(jiǎn)單用法之需要傳入圖片、多邊形的點(diǎn) 和 顏色
看到這里你也許會(huì)想做這樣的操作:
cv2.fillPoly(img, # 原圖畫板
[pts-20, pts+30], # 多邊形的點(diǎn)
color=(0, 0, 255))
你以為他的結(jié)果是這樣的:
實(shí)際上的結(jié)果是這樣的:
關(guān)于為啥是這樣,我覺得圖像學(xué)的知識(shí)可以給一個(gè)解釋,應(yīng)該是 多邊形的掃描轉(zhuǎn)換 那一節(jié),感興趣的諸位自己看看
下一篇來(lái)看多邊形分割結(jié)果繪制的函數(shù)
https://blog.csdn.net/HaoZiHuang/article/details/127027469文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-441468.html
(最近好煩啊,意識(shí)到一直在搞別人寫的函數(shù)怎么用… 很少自己寫,我就是一個(gè)掉包俠wwwwww)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-441468.html
到了這里,關(guān)于cv2.polylines、cv2.fillPoly 和 多邊形繪制分割結(jié)果Python函數(shù)(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!