版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
OpenCV計(jì)算機(jī)視覺處理Computervisionprocessing模塊三
圖像的基本運(yùn)算模塊概述“實(shí)踐沒有止境,理論創(chuàng)新也沒有止境”。圖像運(yùn)算指以圖像為單位進(jìn)行的操作,運(yùn)算的結(jié)果是一幅其灰度分布與原來參與運(yùn)算圖像灰度分布不同的新圖像。OpenCV提供了豐富的功能來進(jìn)行圖像運(yùn)算,包括基本的算術(shù)運(yùn)算、邏輯運(yùn)算以及更高級的運(yùn)算如位運(yùn)算和像素值統(tǒng)計(jì)等。本章學(xué)習(xí)OpenCV圖像的基本運(yùn)算,其中包括加法運(yùn)算符,add()函數(shù),掩模和位運(yùn)算函數(shù),并運(yùn)用這些基本運(yùn)算完成圖像的加密與解密,模擬數(shù)字水印的嵌入和提取,臉部打碼與解碼,獲取圖像感興趣區(qū)域等較為復(fù)雜的圖像運(yùn)算操作。學(xué)習(xí)導(dǎo)航學(xué)習(xí)目標(biāo)1.知識目標(biāo)(1)掌握加號運(yùn)算符(+)及add()函數(shù)的使用方法及區(qū)別;(2)掌握cv2.addWeighted()函數(shù)的各個(gè)參數(shù)的具體作用;(3)掌握圖像的相加;(4)掌握圖像的加權(quán)和(混合、融合);(5)掌握通過cv2.bitwise_xor()函數(shù)實(shí)現(xiàn)圖像的加密與解密;(6)掌握通過cv2.bitwise_and()函數(shù)實(shí)現(xiàn)圖像的局部打碼;(7)掌握數(shù)字水印的嵌入方法;(8)掌握數(shù)字水印的提取方法。學(xué)習(xí)目標(biāo)2.能力目標(biāo)(1)使用Python語言編程;(2)使用加號運(yùn)算符(+)和cv2.add()函數(shù)對圖像進(jìn)行疊加操作;(3)使用cv2.addWeighted()函數(shù)對圖像進(jìn)行加權(quán)和操作;(4)使用cv2.bitwise_xor()函數(shù)實(shí)現(xiàn)的對圖像的加密與解密;(5)使用OpenCV提供的位運(yùn)算函數(shù)來實(shí)現(xiàn)數(shù)字水印的嵌入操作;(6)使用OpenCV提供的位運(yùn)算函數(shù)來實(shí)現(xiàn)數(shù)字水印的提取操作。學(xué)習(xí)目標(biāo)3.素質(zhì)目標(biāo)(1)培養(yǎng)學(xué)生邏輯分析和推理解決問題的能力,鍛煉學(xué)生在復(fù)雜情境中做出正確判斷和決策的能力;(2)鼓勵(lì)學(xué)生在圖像基本運(yùn)算方面的創(chuàng)新思維和獨(dú)特想法,培養(yǎng)學(xué)生將創(chuàng)意轉(zhuǎn)化為實(shí)際作品的能力;(3)培養(yǎng)學(xué)生團(tuán)隊(duì)協(xié)作能力和在團(tuán)隊(duì)中溝通、協(xié)調(diào)和解決問題的能力。任務(wù)一圖像加法運(yùn)算
任務(wù)導(dǎo)入在對圖像進(jìn)行操作的過程中,經(jīng)常會遇到要將兩張圖像疊加或者混合、融合的情況。使用OpenCV提供的加號運(yùn)算符(+)和cv2.add()函數(shù)實(shí)現(xiàn)對圖像不同的疊加效果以及使用cv2.addWeighted()函數(shù)對兩張圖像進(jìn)行加權(quán)和操作。案例代碼1.任務(wù)一:圖像加法運(yùn)算——使用加號運(yùn)算符(+)和
add()函數(shù)實(shí)現(xiàn)圖像的疊加
2.#第一步:打開
Jupyter
Notebook,創(chuàng)建
python
文件,命名為
add_exp.ipynb。引入
OpenCV庫,代碼如下。
3.import
cv2
4.#第二步:讀入圖片
fruits.jpg,將讀取的變量儲存在變量
a
中。圖片要和代碼文件在同一目錄下,代碼如下。
5.a
=
cv2.imread("fruits.jpg",
0)
6.#第三步:分別使用加號運(yùn)算符和函數(shù)
cv2.add()計(jì)算兩幅灰度圖像的像素值之和,代碼如下。
7.b
=
a
8.resultl
=
a+b
9.result2
=
cv2.add(a,
b)
案例代碼10.#第四步:顯示原始圖像
original,使用加號運(yùn)算符計(jì)算后的圖像
resultl
和,使用函數(shù)cv2.add()計(jì)算后的圖像
result2。代碼如下。
11.cv2.imshow("original",
a)
12.cv2.imshow("result1",
resultl)
13.cv2.imshow("result2",
result2)
14.#第五步:銷毀全部窗口,運(yùn)行該程序。
結(jié)果如圖
3-1、3-2、3-3
所示。
15.cv2.waitKey()
16.cv2.destroyAllWindows()
案例結(jié)果原始圖像使用加號運(yùn)算符(+)疊加效果使用add()函數(shù)疊加效果案例代碼1.任務(wù)二:圖像加法運(yùn)算——使用函數(shù)
cv2.addWeighted()實(shí)現(xiàn)對兩幅圖像進(jìn)行加權(quán)混合
2.#第一步:打開Jupyter
Notebook,創(chuàng)建
python
文件,命名為addWeighted_exp.ipynb。引入
OpenCV
庫,代碼如下。
3.import
cv2
4.#第二步:讀入圖片,將讀取的變量儲存在變量
a
和
b
中。圖片要和代碼文件在同一目錄下,代碼如下。
5.a
=
cv2.imread("rose.jpg")
6.b
=
cv2.imread("panda.jpg")
案例代碼
7.#第三步:使用函數(shù)
cv2.addWeighted()對兩幅圖像進(jìn)行加權(quán)混合,被加權(quán)的兩個(gè)圖片必須大小、類型相同。圖像的運(yùn)算可以理解為“result=a*0.6+b*0.4+0”。代碼如下。
8.result
=
cv2.addWeighted(a,
0.6,
b,
0.4,
0)
9.#第四步:顯示圖像
a,b
和加權(quán)混合后的圖像
result。代碼如下。
10.cv2.imshow("a",
a)
11.cv2.imshow("b",
b)
12.cv2.imshow("result",
result)
13.#第五步:銷毀全部窗口,運(yùn)行該程序。結(jié)果如圖3-4
所示。
14.cv2.waitKey()
15.cv2.destroyAllWindows()
案例結(jié)果圖像
A圖像
B圖像A與圖像B加權(quán)疊加后的效果知識拆解1.加號運(yùn)算符(+)加號運(yùn)算的原理就是將兩個(gè)圖像的像素值相加,再將結(jié)果處以256取余數(shù)。2.add()函數(shù)(1)知識介紹add函數(shù)運(yùn)算的原理就是將兩個(gè)圖像的像素值相加并且結(jié)果最大值只能是255。(2)語法格式函數(shù)cv2.add()的語法格式為:result=cv2.add(a,b)a,b兩個(gè)參數(shù)都是圖像時(shí):參與運(yùn)算的圖像大小和類型必須保持一致a是數(shù)值,b是圖像時(shí):將超過圖像飽和值的數(shù)值處理為飽和值(最大值)a是圖像,b是數(shù)值時(shí):將超過圖像飽和值的數(shù)值處理為飽和值(最大值)
知識運(yùn)用1.import
cv2
2.a
=
cv2.imread("t1.jpg")
3.b
=
cv2.imread("t2.jpg")
4.result2
=
cv2.add(a,b)
5.cv2.imshow("result",result)
6.cv2.waitKey()
7.cv2.destroyAllWindows()
使用add()函數(shù)體驗(yàn)圖像的加法運(yùn)算實(shí)驗(yàn)結(jié)果知識拆解(1)知識介紹所謂圖像加權(quán)和,就是在計(jì)算兩幅圖像的像素值之和時(shí),將每幅圖像的權(quán)重考慮進(jìn)來。OpenCV中提供了函數(shù)cv2.addWeighted(),用來實(shí)現(xiàn)圖像的加權(quán)和(混合、融合)。(2)語法格式函數(shù)cv2.addWeighted()語法格式為:dst=cv2.addWeighted(src1,alpha,src2,beta,gamma)其中,參數(shù)alpha和beta是src1和src2所對應(yīng)的系數(shù),它們的和可以等于1,也可以不等于1。該函數(shù)實(shí)現(xiàn)的功能是dst=src1*alpha+src2*beta+gamma。需要注意,式中參數(shù)gamma的值可以是0,但是該參數(shù)是必選參數(shù),不能省略。可以將上式理解為“結(jié)果圖像=圖像1*系數(shù)1+圖像2*系數(shù)2+亮度調(diào)節(jié)”。
知識運(yùn)用1.import
cv2
2.#
讀入兩幅圖像
3.img1
=
cv2.imread('image1.jpg')
4.img2
=
cv2.imread('image2.jpg')
5.#
將兩幅圖像進(jìn)行加權(quán)求和,其中
img1
的權(quán)重為
0.7,img2
的權(quán)重為
0.3
6.dst
=
cv2.addWeighted(img1,
0.7,
img2,
0.3,
0)
7.#
顯示求和后的圖像
8.cv2.imshow('dst',
dst)
9.cv2.waitKey(0)
10.cv2.destroyAllWindows()
add()函數(shù)知識運(yùn)用實(shí)驗(yàn)結(jié)果任務(wù)小結(jié)圖像的加權(quán)和圖像的疊加加號運(yùn)算符(+);cv2.add()函數(shù)。cv2.addWeighted()函數(shù)。任務(wù)一
圖像加法運(yùn)算任務(wù)二圖像加密與解密
任務(wù)導(dǎo)入在對圖像進(jìn)行操作的過程中,會遇到要將圖像進(jìn)行加密解密的情況。使用OpenCV提供的cv2.bitwise_xor()函數(shù)實(shí)現(xiàn)圖像的加密與解密,進(jìn)一步掌握圖像的位運(yùn)算操作。案例代碼1.任務(wù)二:對進(jìn)行圖像加密和解密
2.#第一步:打開
Jupyter
Notebook,創(chuàng)建
python
文件,命名為
xor_exp.ipynb。引入
OpenCV庫和
numpy
庫,代碼如下。
3.import
cv2
4.import
numpy
as
np
5.#第二步:讀入圖片
rose.jpg,將讀取的變量儲存在變量
rose
中。圖片要和代碼文件在同一目錄下,代碼如下。
6.rose
=
cv2.imread("rose.jpg",
0)
7.#第三步:獲取圖像
rose
的長寬,生成一個(gè)和
rose
同樣大小的密鑰。秘鑰的像素是隨機(jī)生成的。代碼如下。
8.r,
c
=
rose.shape
9.key
=
np.random.randint(0,256,size=[r,
c],
dtype=np.uint8)
案例代碼10.#第四步:對圖像
rose
和秘鑰圖像
key
進(jìn)行按位異或運(yùn)算加密,代碼如下。
11.encryption
=
cv2.bitwise_xor(rose,
key)
12.#第五步:對加密后的圖像
encryption
和秘鑰圖像
key
進(jìn)行按位異或運(yùn)算解密,代碼如下。
13.decryption
=
cv2.bitwise_xor(encryption,
key)
14.#第六步:展示圖像
rose,秘鑰圖像
key,加密后的圖像
encryption
和解密后的圖像
decryption,代碼如下。
15.cv2.imshow("rose",
rose)
16.cv2.imshow("key",
key)
17.cv2.imshow("encryption",
encryption)
18.cv2.imshow("decryption",
decryption)
19.#第七步:銷毀全部窗口,運(yùn)行該程序,結(jié)果如圖
3-7
所示。
20.cv2.destroyAllWindows()
案例結(jié)果原始圖像加密后的圖像解密后的圖像秘鑰圖像知識拆解1.掩模(1)知識介紹掩模的實(shí)質(zhì)是一個(gè)二維數(shù)組。OpenCV中的很多函數(shù)都會指定一個(gè)掩模,也稱為掩碼。當(dāng)使用掩碼操作時(shí),操作只會在掩碼上值為非空的點(diǎn)上執(zhí)行,并將其他的點(diǎn)置為零。2.位運(yùn)算(1)知識介紹在OpenCV中,可以使用cv2.bitwise_and()函數(shù)來實(shí)現(xiàn)按位與運(yùn)算。(2)語法格式dst=cv2.bitwise_and(src1,src2[,mask]])式中:dst表示與輸入值具有同樣大小的array輸出值。src1表示第一個(gè)array或scalar類型的輸入值。src2表示第二個(gè)array或scalar類型的輸入值。mask表示可選操作掩碼,8位單通道array。知識運(yùn)用1.#獲取圖像局部區(qū)域。
2.import
cv2
3.a
=
cv2.imread("panda.jpg",
cv2.IMREAD_UNCHANGED)
4.face
=
a[220:400,
500:700]
5.cv2.imshow("original",
a)
6.cv2.imshow("face",
face)
7.cv2.waitKey()
8.cv2.destroyAllWindows()
獲取圖像局部區(qū)域?qū)嶒?yàn)結(jié)果知識運(yùn)用1.#對圖像局部區(qū)域打碼。
2.import
cv2
3.import
numpy
as
np
4.panda
=
cv2.imread("panda.jpg",
0)
5.r,
c
=
panda.shape
6.mask
=
np.zeros((r,
c),
dtype=np.uint8)
7.mask[220:400,
500:700]
=
1
8.noFace
=
cv2.bitwise_and(panda,
(1-mask)*255)
9.cv2.imshow("panda",
panda)
10.cv2.imshow("mask",
mask
*
255)
11.cv2.imshow("1-mask",
(1-mask)
*
255)
12.cv2.imshow("noFace",
noFace)
對圖像局部區(qū)域打碼實(shí)驗(yàn)結(jié)果
任務(wù)小結(jié)圖像的解密圖像的加密cv2.bitwise_xor()函數(shù)。cv2.bitwise_xor()函數(shù)。任務(wù)二
圖像加密與解密任務(wù)三數(shù)字水印的嵌入和提取
任務(wù)導(dǎo)入在對圖像進(jìn)行操作的過程中,經(jīng)常會遇到要對圖像嵌入和提取數(shù)字水印的情況。使用OpenCV提供的位運(yùn)算函數(shù)實(shí)現(xiàn)對圖像嵌入和提取水印的操作,從而將秘密信息嵌入圖像或從圖像中提取秘密信息。案例代碼1.任務(wù)三:數(shù)字水印的嵌入和提取——使用位運(yùn)算實(shí)現(xiàn)數(shù)字水印的嵌入
2.#第一步:創(chuàng)建
python
文件。引入
OpenCV
庫,代碼如下。
3.import
cv2
4.import
numpy
as
np
5.#第二步:讀入原圖像和讀取水印圖像。將水印圖像內(nèi)的值
255
處理為
1,以方便嵌入。代碼如下。
6.Raccoon
=
cv2.imread("Raccoon.png",
0)
7.watermark
=
cv2.imread("opencv.png",
0)
8.w
=
watermark[:,
:]
>
0
9.watermark[w]
=
1
案例代碼10.#第三步:獲取圖像
Raccoon
的長寬,生成一個(gè)和
Raccoon
同樣大小元素值都是
254
的數(shù)組。代碼如下。
11.r,
c
=
Raccoon.shape
12.t254
=
np.ones((r,
c),
dtype=np.uint8)*254
13.#第四步:獲取圖像
Raccoon
像素二進(jìn)制碼的高七位。用
cv2.bitwise_or()函數(shù)將
watermark
二進(jìn)制碼的最低位嵌入
RaccoonH7
內(nèi)。代碼如下。
14.RaccoonH7
=
cv2.bitwise_and(Raccoon,
t254)
15.e
=
cv2.bitwise_or(RaccoonH7,
watermark)
16.#第五步:展示原始圖像
Raccoon,水印圖像
watermark
和含水印的載體圖像e。代碼如下。
17.cv2.imshow("Raccoon",
Raccoon)
18.cv2.imshow("watermark",
watermark*255)
19.cv2.imshow("e",
e)
案例結(jié)果水印圖像原始圖像含水印的載體圖像案例代碼1.任務(wù)三:數(shù)字水印的嵌入和提取——使用位運(yùn)算實(shí)現(xiàn)數(shù)字水印的提取
2.#第一步:創(chuàng)建
python
文件。引入
OpenCV
庫,代碼如下。
3.import
cv2
4.import
numpy
as
np
5.#第二步:讀入含水印的載體圖像。代碼如下。
6.e
=
cv2.imread("e.png",
0)
7.#第三步:獲取圖像
e
的長寬,生成一個(gè)和
e
同樣大小元素值都是
1
的數(shù)組。代碼如下。
8.r,
c
=
e.shape
9.t1
=
np.ones((r,
c),
dtype=np.uint8)
案例代碼
10.#第四步:使用
cv2.bitwise_and()函數(shù)將
e
與
t1
經(jīng)行運(yùn)算,獲取圖像
e
像素二進(jìn)制碼的最低位,并將之存在
wm
中。代碼如下。
11.wm
=
cv2.bitwise_and(e,
t1)
12.#第五步:找到
wm
中大于
0
的像素,將之置為
255,以還原二值水印圖像。代碼如下。
13.w
=
wm[:,
:]
>
0
14.wm[w]
=
255
15.#第六步:展示含水印的載體圖像
e
水印和從含水印的載體圖像
e
內(nèi)提取到的水印圖像
wm。代碼如下。
16.cv2.imshow("e",
e)
17.cv2.imshow("wm",
wm)
案例結(jié)果含水印的載體圖像提取到的水印圖像知識拆解1.位運(yùn)算(1)知識介紹cv2.bitwise_and()是OpenCV中的位運(yùn)算函數(shù)之一,用于對兩幅二值圖像
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人工智能教育教師專業(yè)能力提升路徑中微認(rèn)證的融合與創(chuàng)新教學(xué)研究課題報(bào)告
- 2026秋招:金利金鉛集團(tuán)筆試題及答案
- 2026秋招:江西鎢業(yè)控股集團(tuán)面試題及答案
- 數(shù)字廣告投放及管理規(guī)則指南
- 2026秋招:冀南鋼鐵集團(tuán)筆試題及答案
- 2026年大學(xué)(港口航道與海岸工程)實(shí)訓(xùn)測試試題及答案
- 2026秋招:吉林吉盛資產(chǎn)管理公司筆試題及答案
- 職業(yè)性塵肺病2025年防治試題及答案
- 做賬實(shí)操-零食店公司會計(jì)賬務(wù)處理分錄
- 2025年咨詢工程師《決策分析與評價(jià)》考試真題及答案
- 煤礦基本知識培訓(xùn)課件
- GB/T 9754-2025色漆和清漆20°、60°和85°光澤的測定
- 運(yùn)輸合同轉(zhuǎn)包協(xié)議書范本
- 碳排放監(jiān)測與控制技術(shù)-洞察闡釋
- 回顧性研究設(shè)計(jì)及寫作要點(diǎn)
- 中藥儲存養(yǎng)護(hù)管理制度
- T/CECS 10128-2021不銹鋼二次供水水箱
- 2025屆山東省臨沂市高三二模生物試題(解析版)
- 專利侵權(quán)訴訟合同范例
- 銀行審計(jì)試題解析及答案
- 自適應(yīng)巡航控制與跟車技術(shù)-深度研究
評論
0/150
提交評論