电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

python進(jìn)行OpenCV實(shí)戰(zhàn)之畫圖(直線、矩形、圓形)

瀏覽:3日期:2022-07-13 08:27:19

前言

在上一節(jié)我們通過使用NumPy的數(shù)組分割成功的在我們的圖像上畫了一個(gè)綠色的方塊,但是如果我們想畫一個(gè)單一的線條或者圓圈該怎么辦呢?NumPy沒有提供相關(guān)的功能,但是OpenCV提供了相關(guān)的函數(shù),在本節(jié)就將為大家介紹三個(gè)基本的OpenCV畫圖方法:

cv2.line() #1cv2.rectangle() #2cv2.circle() #3

1 畫直線和矩形

在開始我們用OpenCV畫我們的杰作之前,我們需要定義一個(gè)畫布

import numpy as np #1import cv2 #2canvas = np.zeros((300, 300, 3), dtype='uint8') #3

#1-2:

關(guān)于所需包的導(dǎo)入

#3:

我們使用np.zeros()方法構(gòu)造了一個(gè)300*300的NumPy數(shù)組,同時(shí)分配了三個(gè)顏色空間,分別表示Red,Green,Blue,正如zeros名字所描述的一樣,這個(gè)方法用0填充了這個(gè)數(shù)組的每一個(gè)元素。在np.zeros()的第二個(gè)變量是數(shù)據(jù)類型:dtype。由于我們需要用RGB格式來表示我們的圖像,它的取值范圍是[0,255],所以我們用“uint8”就顯得至關(guān)重要了,如果不聲明的話np.zeros()默認(rèn)的變量類型是float64.

1.1 畫直線

green = (0, 255, 0) #4cv2.line(canvas, (0, 0), (300, 300), green) #5cv2.imshow('Canvas', canvas) #6cv2.waitKey(0) #7red = (0, 0, 255) #8cv2.line(canvas, (300, 0), (0, 300), red, 3) #9cv2.imshow('Canvas', canvas) #10cv2.waitKey(0) #11

#4:

我們定義了一個(gè)元組來表示綠色

#5-7:

我們在canvas上畫了一條綠線從坐標(biāo)(0,0)到(300,300),將結(jié)果顯示出來,并等待按下任意按鍵

#8:

我們定義了一個(gè)元組來表示紅色,再次強(qiáng)調(diào)OpenCV是BGR模式而不是RGB模式

#9-11:

我們在canvas上畫了一條紅線從坐標(biāo)(300,0)到(0,300),并且該線的線型為3個(gè)像素,這也是最后一個(gè)參數(shù)的含義,然后將結(jié)果顯示出來,并等待按下任意按鍵

1.2 畫矩形

cv2.rectangle(canvas, (10, 10), (60, 60), green) #12cv2.imshow('Canvas', canvas) #13cv2.waitKey(0) #14cv2.rectangle(canvas, (50, 200), (200, 225), red, 5) #15cv2.imshow('Canvas', canvas) #16cv2.waitKey(0) #17blue = (255, 0, 0) #18cv2.rectangle(canvas, (200, 50), (225, 125), blue, -1) #19cv2.imshow('Canvas', canvas) #20cv2.waitKey(0) #21

#12-14:

我們使用了cv2.rectangle()方法,這個(gè)方法與cv2.line()方法用法是一樣的,第一個(gè)參數(shù)表示我們想要在canvas這個(gè)畫布上進(jìn)行畫圖,第二個(gè)參數(shù)是我們矩形的開始點(diǎn)(10,10),第三個(gè)參數(shù)是我們矩形的結(jié)束點(diǎn)(60,60),通過這兩個(gè)點(diǎn)我們定義了一個(gè)50*50像素大小的區(qū)域,第四個(gè)參數(shù)是我們矩形邊框的顏色——綠色,然后將結(jié)果顯示出來,并等待按下任意按鍵。

#15-17:

在第15行代碼中,正如我們可以控制話直線的線型粗細(xì)程度,我們也可以控制畫矩形的線型粗細(xì),在這行代碼中最后一個(gè)參數(shù)“5”,則表示我們將在canvas上畫出一個(gè)邊框粗細(xì)為5個(gè)像素大小的起點(diǎn)為(50, 200),終點(diǎn)為 (200, 225)的紅色矩形,然后將結(jié)果顯示出來,并等待按下任意按鍵。

#18-21

到目前為止,我們畫的都是圖形的邊框,如果我們想要填充這個(gè)邊框怎么辦呢? 在第19行代碼中:

cv2.rectangle(canvas, (200, 50), (225, 125), blue, -1) #19

我們畫了一個(gè)起點(diǎn)為(200,50),終點(diǎn)為(225,125)的藍(lán)色矩形,當(dāng)我們將最后一個(gè)設(shè)置線型的參數(shù)設(shè)置為“-1”,我們便可以得到一個(gè)填充藍(lán)色的矩形。

2 畫圓形

畫圓形和畫直線和矩形是一樣容易的,但是它有有一些不同:

2.1 同心圓

canvas = np.zeros((300, 300, 3), dtype='uint8') #22(centerX, centerY) = (canvas.shape[1] // 2, canvas.shape[0] // 2) #23white = (255, 255, 255) #24for r in range(0, 175, 25): #25 cv2.circle(canvas, (centerX, centerY), r, white) #26cv2.imshow('Canvas', canvas) #27cv2.waitKey(0) #28for i in range(0, 25): #29 radius = np.random.randint(5, high=200) #30 color = np.random.randint(0, high=256, size=(3,)) #31 pt = np.random.randint(0, high=300, size=(2,)) #32 cv2.circle(canvas, tuple(pt), radius, color, 1) #33cv2.imshow('Canvas', canvas) #34cv2.waitKey(0) #35

#22:

我們重新將我們的畫板變成一個(gè)白板

#23:

我們定義并計(jì)算一個(gè)中心點(diǎn)的坐標(biāo)(centerX,centerY),在第1節(jié)和第2節(jié)我們均提到過shape[0]表示圖片的高度,shape[1]表示圖片的寬度,分別取它們的一半,得到centerY,centerX

#24:

定義一個(gè)白色的像素

#25-28:

我們從[0,175)的范圍以跨度為25進(jìn)行循環(huán)來取圓的半徑,

cv2.circle(canvas, (centerX, centerY), r, white) #26

然后在第26行通過cv2.circle()來進(jìn)行畫圓,第一個(gè)參數(shù)表示在canvas上進(jìn)行繪畫,第二個(gè)參數(shù)表示圓心,第三個(gè)參數(shù)表示半徑,第四個(gè)參數(shù)表示顏色。然后將結(jié)果顯示出來,并等待按下任意按鍵。

2.2 隨機(jī)圓

讓我們來讓圓多一點(diǎn)趣味:

for i in range(0, 25): #29 radius = np.random.randint(5, high=200) #30 color = np.random.randint(0, high=256, size=(3,)) #31 pt = np.random.randint(0, high=300, size=(2,)) #32 cv2.circle(canvas, tuple(pt), radius, color, -1) #33cv2.imshow('Canvas', canvas) #34cv2.waitKey(0) #35

#29:

通過循環(huán)表示,我們將畫25個(gè)圓

#30-32:

如果要畫圓,我們需要三個(gè)基本元素:圓的半徑,圓的顏色,圓的圓心。在這里我們需要通過np.random.randint使用NumPy中產(chǎn)生隨機(jī)數(shù)的能力。

radius = np.random.randint(5, high=200) #30

在第30行我們在[5,200)范圍內(nèi)產(chǎn)生隨機(jī)數(shù)

color = np.random.randint(0, high=256, size=(3,)) #31

在第31行我們將在[0,256)范圍內(nèi)產(chǎn)生隨機(jī)數(shù),由于顏色值擁有3個(gè)通道值,我們通過size=(3,)讓NumPy返回一個(gè)包含三個(gè)元素的列表。

pt = np.random.randint(0, high=300, size=(2,)) #32

在第32行我們將在[0,300)范圍內(nèi)產(chǎn)生隨機(jī)數(shù),我們通過size=(2,)讓NumPy返回一個(gè)包含2個(gè)元素的列表來表示圓心。

#33:

cv2.circle(canvas, tuple(pt), radius, color, -1) #33

在第33行中,我們通過調(diào)用cv2.circle()方法來畫圓,第一個(gè)參數(shù)表示在canvas上畫圓,第二個(gè)參數(shù)圓心坐標(biāo)需要注意必須是元組,所以使用tuple來進(jìn)行強(qiáng)制轉(zhuǎn)化列表,第三個(gè)參數(shù)是半徑,第四個(gè)參數(shù)表示顏色,第5個(gè)參數(shù)為“-1”,表示產(chǎn)生實(shí)心圓。

#34-35: 將結(jié)果顯示出來,并等待按下任意按鍵。

3 完整代碼

新建drawing.py

import numpy as npimport cv2canvas = np.zeros((300, 300, 3), dtype='uint8')green = (0, 255, 0)cv2.line(canvas, (0, 0), (300, 300), green)cv2.imshow('Canvas', canvas)cv2.waitKey(0)red = (0, 0, 255)cv2.line(canvas, (300, 0), (0, 300), red, 3)cv2.imshow('Canvas', canvas)cv2.waitKey(0)cv2.rectangle(canvas, (10, 10), (60, 60), green)cv2.imshow('Canvas', canvas)cv2.waitKey(0)cv2.rectangle(canvas, (50, 200), (200, 225), red, 5)cv2.imshow('Canvas', canvas)cv2.waitKey(0)blue = (255, 0, 0)cv2.rectangle(canvas, (200, 50), (225, 125), blue, -1)cv2.imshow('Canvas', canvas)cv2.waitKey(0)canvas = np.zeros((300, 300, 3), dtype='uint8')(centerX, centerY) = (canvas.shape[1] // 2, canvas.shape[0] // 2)white = (255, 255, 255)for r in range(0, 175, 25): cv2.circle(canvas, (centerX, centerY), r, white)cv2.imshow('Canvas', canvas)cv2.waitKey(0)for i in range(0, 25): radius = np.random.randint(5, high=200) color = np.random.randint(0, high=256, size=(3,)) pt = np.random.randint(0, high=300, size=(2,)) cv2.circle(canvas, tuple(pt), radius, color, -1)cv2.imshow('Canvas', canvas)cv2.waitKey(0)

4 效果展示

python進(jìn)行OpenCV實(shí)戰(zhàn)之畫圖(直線、矩形、圓形)

python進(jìn)行OpenCV實(shí)戰(zhàn)之畫圖(直線、矩形、圓形)

python進(jìn)行OpenCV實(shí)戰(zhàn)之畫圖(直線、矩形、圓形)

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 成都亚克力制品,PVC板,双色板雕刻加工,亚克力门牌,亚克力标牌,水晶字雕刻制作-零贰捌广告 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 山东信蓝建设有限公司官网| 卫生型双针压力表-高温防腐差压表-安徽康泰电气有限公司 | 生物风-销售载体,基因,质粒,ATCC细胞,ATCC菌株等,欢迎购买-百风生物 | 塑胶跑道施工-硅pu篮球场施工-塑胶网球场建造-丙烯酸球场材料厂家-奥茵 | 高压包-点火器-高压发生器-点火变压器-江苏天网 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 珠宝展柜-玻璃精品展柜-首饰珠宝展示柜定制-鸿钛展柜厂家 | 注塑模具_塑料模具_塑胶模具_范仕达【官网】_东莞模具设计与制造加工厂家 | 中国品牌排名投票_十大品牌榜单_中国著名品牌【中国品牌榜】 | 定时排水阀/排气阀-仪表三通旋塞阀-直角式脉冲电磁阀-永嘉良科阀门有限公司 | 骨密度仪-骨密度测定仪-超声骨密度仪-骨龄测定仪-天津开发区圣鸿医疗器械有限公司 | jrs高清nba(无插件)直播-jrs直播低调看直播-jrs直播nba-jrs直播 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 石家庄小程序开发_小程序开发公司_APP开发_网站制作-石家庄乘航网络科技有限公司 | 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 99文库_实习生实用的范文资料文库站 | LZ-373测厚仪-华瑞VOC气体检测仪-个人有毒气体检测仪-厂家-深圳市深博瑞仪器仪表有限公司 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 全温恒温摇床-水浴气浴恒温摇床-光照恒温培养摇床-常州金坛精达仪器制造有限公司 | 西安文都考研官网_西安考研辅导班_考研培训机构_西安在职考研培训 | 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 过滤器_自清洗过滤器_气体过滤器_苏州华凯过滤技术有限公司 | 高低温万能试验机_拉力试验机_拉伸试验机-馥勒仪器科技(上海)有限公司 | 国产频谱分析仪-国产网络分析仪-上海坚融实业有限公司 | 比亚迪叉车-比亚迪电动叉车堆垛车托盘车仓储叉车价格多少钱报价 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 色谱柱-淋洗液罐-巴罗克试剂槽-巴氏吸管-5ml样品瓶-SBS液氮冻存管-上海希言科学仪器有限公司 | 北京环球北美考试院【官方网站】|北京托福培训班|北京托福培训 | 航空连接器,航空插头,航空插座,航空接插件,航插_深圳鸿万科 | 十二星座查询(性格特点分析、星座运势解读) - 玄米星座网 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | 流变仪-热分析联用仪-热膨胀仪厂家-耐驰科学仪器商贸 | 利浦顿蒸汽发生器厂家-电蒸汽发生器/燃气蒸汽发生器_湖北利浦顿热能科技有限公司官网 | 闪电优家-卫生间防水补漏_酒店漏水渗水维修_防水堵漏公司 | 南方珠江-南方一线电缆-南方珠江科技电缆-南方珠江科技有限公司 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | LOGO设计_品牌设计_VI设计 - 特创易 |