OpenCV計(jì)算機(jī)視覺處理 課件 模塊三 圖像的基本運(yùn)算_第1頁
OpenCV計(jì)算機(jī)視覺處理 課件 模塊三 圖像的基本運(yùn)算_第2頁
OpenCV計(jì)算機(jī)視覺處理 課件 模塊三 圖像的基本運(yùn)算_第3頁
OpenCV計(jì)算機(jī)視覺處理 課件 模塊三 圖像的基本運(yùn)算_第4頁
OpenCV計(jì)算機(jī)視覺處理 課件 模塊三 圖像的基本運(yùn)算_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論