[Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形
歡迎大家來到“Python從零到壹”,在這里我將分享約200篇Python系列文章,帶大家一起去學(xué)習(xí)和玩耍,看看Python這個有趣的世界。所有文章都將結(jié)合案例、代碼和作者的經(jīng)驗講解,真心想把自己近十年的編程經(jīng)驗分享給大家,希望對您有所幫助,文章中不足之處也請海涵。Python系列整體框架包括基礎(chǔ)語法10篇、網(wǎng)絡(luò)爬蟲30篇、可視化分析10篇、機器學(xué)習(xí)20篇、大數(shù)據(jù)分析20篇、圖像識別30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的關(guān)注、點贊和轉(zhuǎn)發(fā)就是對秀璋最大的支持,知識無價人有情,希望我們都能在人生路上開心快樂、共同成長。
該系列文章主要講解Python OpenCV圖像處理和圖像識別知識,前期主要講解圖像處理基礎(chǔ)知識、OpenCV基礎(chǔ)用法、常用圖像繪制方法、圖像幾何變換等,中期講解圖像處理的各種運算,包括圖像點運算、形態(tài)學(xué)處理、圖像銳化、圖像增強、圖像平滑等,后期研究圖像識別、圖像分割、圖像分類、圖像特效處理以及圖像處理相關(guān)應(yīng)用。
上一篇文章介紹了OpenCV入門知識,包括OpenCV常見數(shù)據(jù)類型、顯示圖像、讀取像素、修改像素、創(chuàng)建圖像、復(fù)制圖像、保存圖像等內(nèi)容。這篇文章將詳細(xì)講解如何使用OpenCV繪制各類幾何圖形,包括cv2.line()、v2.circle()、cv2.rectangle()、cv2.ellipse()、cv2.polylines()、cv2.putText()函數(shù)。這將幫助我們了解基礎(chǔ)圖形繪制的基礎(chǔ)用法,同時能在此基礎(chǔ)上實現(xiàn)畫圖軟件等應(yīng)用拓展。希望文章對您有所幫助,如果有不足之處,還請海涵。
文章目錄
- 一.繪制直線
- 二.繪制矩形
- 三.繪制圓形
- 四.繪制橢圓
- 五.繪制多邊形
- 六.繪制文字
- 七.總結(jié)
下載地址:
- https://github.com/eastmountyxz/Python-zero2one
前文賞析:
第一部分 基礎(chǔ)語法
- [Python從零到壹] 一.為什么我們要學(xué)Python及基礎(chǔ)語法詳解
- [Python從零到壹] 二.語法基礎(chǔ)之條件語句、循環(huán)語句和函數(shù)
- [Python從零到壹] 三.語法基礎(chǔ)之文件操作、CSV文件讀寫及面向?qū)ο?/li>
第二部分 網(wǎng)絡(luò)爬蟲
- [Python從零到壹] 四.網(wǎng)絡(luò)爬蟲之入門基礎(chǔ)及正則表達(dá)式抓取博客案例
- [Python從零到壹] 五.網(wǎng)絡(luò)爬蟲之BeautifulSoup基礎(chǔ)語法萬字詳解
- [Python從零到壹] 六.網(wǎng)絡(luò)爬蟲之BeautifulSoup爬取豆瓣TOP250電影詳解
- [Python從零到壹] 七.網(wǎng)絡(luò)爬蟲之Requests爬取豆瓣電影TOP250及CSV存儲
- [Python從零到壹] 八.數(shù)據(jù)庫之MySQL基礎(chǔ)知識及操作萬字詳解
- [Python從零到壹] 九.網(wǎng)絡(luò)爬蟲之Selenium基礎(chǔ)技術(shù)萬字詳解(定位元素、常用方法、鍵盤鼠標(biāo)操作)
- [Python從零到壹] 十.網(wǎng)絡(luò)爬蟲之Selenium爬取在線百科知識萬字詳解(NLP語料構(gòu)造必備技能)
第三部分 數(shù)據(jù)分析和機器學(xué)習(xí)
- [Python從零到壹] 十一.數(shù)據(jù)分析之Numpy、Pandas、Matplotlib和Sklearn入門知識萬字詳解(1)
- [Python從零到壹] 十二.機器學(xué)習(xí)之回歸分析萬字總結(jié)全網(wǎng)首發(fā)(線性回歸、多項式回歸、邏輯回歸)
- [Python從零到壹] 十三.機器學(xué)習(xí)之聚類分析萬字總結(jié)全網(wǎng)首發(fā)(K-Means、BIRCH、層次聚類、樹狀聚類)
- [Python從零到壹] 十四.機器學(xué)習(xí)之分類算法三萬字總結(jié)全網(wǎng)首發(fā)(決策樹、KNN、SVM、分類算法對比)
- [Python從零到壹] 十五.文本挖掘之?dāng)?shù)據(jù)預(yù)處理、Jieba工具和文本聚類萬字詳解
- [Python從零到壹] 十六.文本挖掘之詞云熱點與LDA主題分布分析萬字詳解
- [Python從零到壹] 十七.可視化分析之Matplotlib、Pandas、Echarts入門萬字詳解
- [Python從零到壹] 十八.可視化分析之Basemap地圖包入門詳解
- [Python從零到壹] 十九.可視化分析之熱力圖和箱圖繪制及應(yīng)用詳解
- [Python從零到壹] 二十.可視化分析之Seaborn繪圖萬字詳解
- [Python從零到壹] 二十一.可視化分析之Pyechart繪圖萬字詳解
- [Python從零到壹] 二十二.可視化分析之OpenGL繪圖萬字詳解
- [Python從零到壹] 二十三.十大機器學(xué)習(xí)算法之決策樹分類分析詳解(1)
- [Python從零到壹] 二十四.十大機器學(xué)習(xí)算法之KMeans聚類分析詳解(2)
- [Python從零到壹] 二十五.十大機器學(xué)習(xí)算法之KNN算法及圖像分類詳解(3)
- [Python從零到壹] 二十六.十大機器學(xué)習(xí)算法之樸素貝葉斯算法及文本分類詳解(4)
- [Python從零到壹] 二十七.十大機器學(xué)習(xí)算法之線性回歸算法分析詳解(5)
- [Python從零到壹] 二十八.十大機器學(xué)習(xí)算法之SVM算法分析詳解(6)
- [Python從零到壹] 二十九.十大機器學(xué)習(xí)算法之隨機森林算法分析詳解(7)
- [Python從零到壹] 三十.十大機器學(xué)習(xí)算法之邏輯回歸算法及惡意請求檢測應(yīng)用詳解(8)
- [Python從零到壹] 三十一.十大機器學(xué)習(xí)算法之Boosting和AdaBoost應(yīng)用詳解(9)
- [Python從零到壹] 三十二.十大機器學(xué)習(xí)算法之層次聚類和樹狀圖聚類應(yīng)用詳解(10)
第四部分 Python圖像處理基礎(chǔ)
- [Python從零到壹] 三十三.圖像處理基礎(chǔ)篇之什么是圖像處理和OpenCV配置
- [Python從零到壹] 三十四.OpenCV入門詳解——顯示讀取修改及保存圖像
- [Python從零到壹] 三十五.圖像處理基礎(chǔ)篇之OpenCV繪制各類幾何圖形
第五部分 Python圖像運算和圖像增強
第六部分 Python圖像識別和圖像處理經(jīng)典案例
第七部分 NLP與文本挖掘
第八部分 人工智能入門知識
第九部分 網(wǎng)絡(luò)攻防與AI安全
第十部分 知識圖譜構(gòu)建實戰(zhàn)
擴展部分 人工智能高級案例
作者新開的“娜璋AI安全之家”將專注于Python和安全技術(shù),主要分享Web滲透、系統(tǒng)安全、人工智能、大數(shù)據(jù)分析、圖像識別、惡意代碼檢測、CVE復(fù)現(xiàn)、威脅情報分析等文章。雖然作者是一名技術(shù)小白,但會保證每一篇文章都會很用心地撰寫,希望這些基礎(chǔ)性文章對你有所幫助,在Python和安全路上與大家一起進(jìn)步。
一.繪制直線
在OpenCV中,繪制直線需要獲取直線的起點和終點坐標(biāo),調(diào)用cv2.line()函數(shù)實現(xiàn)該功能。該函數(shù)原型如下所示:
- img = line(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
– img表示需要繪制的那幅圖像
– pt1表示線段第一個點的坐標(biāo)
– pt2表示線段第二個點的坐標(biāo)
– color表示線條顏色,需要傳入一個RGB元組,如(255,0,0)代表藍(lán)色
– thickness表示線條粗細(xì)
– lineType表示線條的類型
– shift表示點坐標(biāo)中的小數(shù)位數(shù)
下面的代碼是繪制一條直線,通過np.zeros()創(chuàng)建一幅黑色圖像,接著調(diào)用cv2.line()繪制直線,參數(shù)包括起始坐標(biāo)和顏色、粗細(xì)。
# -*- coding:utf-8 -*- # By:Eastmount import cv2 import numpy as np#創(chuàng)建黑色圖像 img = np.zeros((256,256,3), np.uint8)#繪制直線 cv2.line(img, (0,0), (255,255), (55,255,155), 5)#顯示圖像 cv2.imshow("line", img)#等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()輸出結(jié)果如圖3-1所示,從坐標(biāo)(0,0)到(255,255)繪制一條直線,其直線顏色為(55,255,155),粗細(xì)為5。
二.繪制矩形
在OpenCV中,繪制矩形通過cv2.rectangle()函數(shù)實現(xiàn),該函數(shù)原型如下所示:
- img = rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
– img表示需要繪制的那幅圖像
– pt1表示矩形的左上角位置坐標(biāo)
– pt2表示矩形的右下角位置坐標(biāo)
– color表示矩形的顏色
– thickness表示邊框的粗細(xì)
– lineType表示線條的類型
– shift表示點坐標(biāo)中的小數(shù)位數(shù)
下面的代碼是繪制一個矩形,通過np.zeros()創(chuàng)建一幅黑色圖像,接著調(diào)用cv2.rectangle()繪制矩形。
# -*- coding:utf-8 -*- # By:Eastmount import cv2 import numpy as np#創(chuàng)建黑色圖像 img = np.zeros((256,256,3), np.uint8)#繪制矩形 cv2.rectangle(img, (20,20), (150,250), (255,0,0), 2)#顯示圖像 cv2.imshow("rectangle", img)#等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()輸出結(jié)果如圖3-2所示,從左上角坐標(biāo)為(20,20),右下角坐標(biāo)為(150,250),繪制的矩形顏色為藍(lán)色(255,0,0),粗細(xì)為2。
三.繪制圓形
在OpenCV中,繪制矩形通過cv2.rectangle()函數(shù)實現(xiàn),該函數(shù)原型如下所示:
- img = circle(img, center, radius, color[, thickness[, lineType[, shift]]])
– img表示需要繪制圓的圖像
– center表示圓心坐標(biāo)
– radius表示圓的半徑
– color表示圓的顏色
– thickness如果為正值,表示圓輪廓的厚度;負(fù)厚度表示要繪制一個填充圓
– lineType表示圓的邊界類型
– shift表示中心坐標(biāo)和半徑值中的小數(shù)位數(shù)
下面代碼是繪制一個圓形。
# -*- coding:utf-8 -*- # By:Eastmount import cv2 import numpy as np#創(chuàng)建黑色圖像 img = np.zeros((256,256,3), np.uint8)#繪制圓形 cv2.circle(img, (100,100), 50, (255,255,0), 4)#顯示圖像 cv2.imshow("circle", img)#等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()輸出結(jié)果如圖3-3所示,它在圓形為(100,100)的位置,繪制了一個半徑為50,顏色為(255,255,0)、粗細(xì)為4的圓。
注意,如果將粗細(xì)設(shè)置為“-1”,則繪制的圓為實心,如圖3-4所示。
- cv2.circle(img, (100,100), 50, (255,255,0), -1)
四.繪制橢圓
在OpenCV中,繪制橢圓比較復(fù)雜,要多輸入幾個參數(shù),如中心點的位置坐標(biāo),長軸和短軸的長度,橢圓沿逆時針方向旋轉(zhuǎn)的角度等。cv2.ellipse()函數(shù)原型如下所示:
- img = ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]])
– img表示需要繪制橢圓的圖像
– center表示橢圓圓心坐標(biāo)
– axes表示軸的長度(短半徑和長半徑)
– angle表示偏轉(zhuǎn)的角度(逆時針旋轉(zhuǎn))
– startAngle表示圓弧起始角的角度(逆時針旋轉(zhuǎn))
– endAngle表示圓弧終結(jié)角的角度(逆時針旋轉(zhuǎn))
– color表示線條的顏色
– thickness如果為正值,表示橢圓輪廓的厚度;負(fù)值表示要繪制一個填充橢圓
– lineType表示圓的邊界類型
– shift表示中心坐標(biāo)和軸值中的小數(shù)位數(shù)
下面是繪制一個橢圓的代碼。
# -*- coding:utf-8 -*- # By:Eastmount import cv2 import numpy as np#創(chuàng)建黑色圖像 img = np.zeros((256,256,3), np.uint8)#繪制橢圓 #橢圓中心(120,100) 長軸和短軸為(100,50) #偏轉(zhuǎn)角度為20 #圓弧起始角的角度0 圓弧終結(jié)角的角度360 #顏色(255,0,255) 線條粗細(xì)2 cv2.ellipse(img, (120, 100), (100, 50), 20, 0, 360, (255, 0, 255), 2)#顯示圖像 cv2.imshow("ellipse", img)#等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()輸出結(jié)果如圖3-5所示,其橢圓中心為(120,100),長軸為100,短軸為50,偏轉(zhuǎn)角度為20,圓弧起始角的角度為0,圓弧終結(jié)角的角度為360,表示一個完整的橢圓。繪制的顏色為(255,0,255),粗細(xì)為2。
五.繪制多邊形
在OpenCV中,調(diào)用cv2.polylines()函數(shù)繪制多邊形,它需要指定每個頂點的坐標(biāo),通過這些點構(gòu)建多邊形,其函數(shù)原型如下所示:
- img = polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]])
– img表示需要繪制的圖像
– center表示多邊形曲線陣列
– isClosed表示繪制的多邊形是否閉合,False表示不閉合
– color表示線條的顏色
– thickness表示線條粗細(xì)
– lineType表示邊界類型
– shift表示頂點坐標(biāo)中的小數(shù)位數(shù)
下面是繪制一個多邊形的代碼。
# -*- coding:utf-8 -*- # By:Eastmount import cv2 import numpy as np#創(chuàng)建黑色圖像 img = np.zeros((256,256,3), np.uint8)#繪制多邊形 pts = np.array([[10,80], [120,80], [120,200], [30,250]]) cv2.polylines(img, [pts], True, (255, 255, 255), 5)#顯示圖像 cv2.imshow("ellipse", img)#等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()輸出結(jié)果如圖3-6所示,繪制的多邊形為白色的閉合圖形。
下面的代碼是繪制一個五角星多邊形。
# -*- coding:utf-8 -*- # By:Eastmount import cv2 import numpy as np#創(chuàng)建黑色圖像 img = np.zeros((512,512,3), np.uint8)#繪制多邊形 pts = np.array([[50, 190], [380, 420], [255, 50], [120, 420], [450, 190]]) cv2.polylines(img, [pts], True, (0, 255, 255), 10)#顯示圖像 cv2.imshow("ellipse", img)#等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()輸出結(jié)果如圖3-7所示,它將五個頂點左邊分別連接起來,構(gòu)成了一個黃色的五角星。
六.繪制文字
在OpenCV中,調(diào)用cv2.putText()函數(shù)添加對應(yīng)的文字,其函數(shù)原型如下所示:
- img = putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])
– img表示要繪制的圖像
– text表示要繪制的文字
– org表示要繪制的位置,圖像中文本字符串的左下角
– fontFace表示字體類型,具體查看see cv::HersheyFonts
– fontScale表示字體的大小,計算為比例因子乘以字體特定的基本大小
– color表示字體的顏色
– thickness表示字體的粗細(xì)
– lineType表示邊界類型
– bottomLeftOrigin如果為真,則圖像數(shù)據(jù)原點位于左下角,否則它在左上角
下面是繪制文字的代碼。
# -*- coding:utf-8 -*- # By:Eastmount import cv2 import numpy as np#創(chuàng)建黑色圖像 img = np.zeros((256,256,3), np.uint8)#繪制文字 font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img, 'I love Python!I love Huawei!',(10, 100), font, 0.5, (255, 255, 0), 2)#顯示圖像 cv2.imshow("polylines", img)#等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()輸出結(jié)果如圖3-8所示,繪制的文字為“I love Python!I love Huawei!”。
七.總結(jié)
本文詳細(xì)介紹了OpenCV繪制幾何圖形的方法,利用cv2.line()、v2.circle()、cv2.rectangle()、cv2.ellipse()、cv2.polylines()、cv2.putText()函數(shù)實現(xiàn)。初學(xué)者通過這篇文章將了解基礎(chǔ)圖形繪制的基礎(chǔ)用法,為后續(xù)應(yīng)用提供幫助。同時,建議讀者結(jié)合這篇文章實現(xiàn)一個畫圖軟件,您可以嗎?
感謝在求學(xué)路上的同行者,不負(fù)遇見,勿忘初心。圖像處理系列主要包括三部分,分別是:
這周的留言感慨~
十二年CSDN的博客分享,如果要說分享最讓我開心的是什么?不是傳道,不是授業(yè),也不是解惑,而是接下來這類事。這些年已經(jīng)陸續(xù)鼓勵了一些朋友當(dāng)老師,而昨天得知這一位博友真的去到新疆南疆成為了一名小學(xué)老師,我很是感動,是真的感動,六年前我曾鼓勵他如果想,就放棄高額工資的互聯(lián)網(wǎng)大廠,去做自己想做的,沒想到已經(jīng)當(dāng)了四年老師。又當(dāng)?shù)之?dāng)媽,國語普及,文化教育,這里面的艱辛不是一兩句道得清,除了佩服就是鼓勵。
正如你說的一樣,“一輩子總得做點有意義的事情,生命實在太短暫,一定要活得積極、正面”。或許,這也是我在CSDN分享博客的最大意義,再比如云南那位老友的留言,“農(nóng)村的孩子下雨沒有傘,只能拼命奔跑”,希望你以后也能成為一名教師,感恩有你們,感謝有你們。我也希望自己早日畢業(yè)回到家鄉(xiāng),花上三四十年做好兩件事,一是認(rèn)真教書,二是將少數(shù)民族文物搶救和文字語音保護(hù)做好,也鼓勵更多人一起加入進(jìn)來。自己雖然很菜吧,但還是有一些喜歡的事,尤其陪伴愛的人,挺好,愛你們喔。2022年繼續(xù)加油,在CSDN分享更高質(zhì)量的博客和專欄。
(By:娜璋之家 Eastmount 2022-01-24 夜于貴陽 https://blog.csdn.net/Eastmount )
總結(jié)
以上是生活随笔為你收集整理的[Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Python图像识别] 四十九.图像生
- 下一篇: [Python从零到壹] 三十七.图像处