OpenCV 掩膜的应用
生活随笔
收集整理的這篇文章主要介紹了
OpenCV 掩膜的应用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
掩膜是用選定的圖像、圖形或物體,對要處理的圖像進(jìn)行遮擋,來控制圖像 處理的區(qū)域。
在數(shù)字圖像處理中,通常使用二維矩陣數(shù)組進(jìn)行掩膜。掩膜是由0和1組成一個二進(jìn)制圖像,利用該掩膜圖像要處理的圖像進(jìn)行掩膜,其中1值的區(qū)域被處理,0 值區(qū)域被屏蔽,不會處理。
掩膜的主要用途是:
- 提取感興趣區(qū)域:用預(yù)先制作的感興趣區(qū)掩模與待處理圖像進(jìn)行”與“操作,得到感興趣區(qū)圖像,感興趣區(qū)內(nèi)圖像值保持不變,而區(qū)外圖像值都為0。
- 屏蔽作用:用掩模對圖像上某些區(qū)域作屏蔽,使其不參加處理或不參加處理參數(shù)的計算,或僅對屏蔽區(qū)作處理或統(tǒng)計。
- 結(jié)構(gòu)特征提取:用相似性變量或圖像匹配方法檢測和提取圖像中與掩模相似的結(jié)構(gòu)特征。
特殊形狀圖像制作
掩膜在遙感影像處理中使用較多,當(dāng)提取道路或者河流,或者房屋時,通過一個掩膜矩陣來對圖像進(jìn)行像素過濾,然后將需要的地物或者標(biāo)志突出顯示出來。
使用cv.calcHist()來查找完整圖像的直方圖。
如果要查找圖像某些區(qū)域的直方圖,只需在要查找直方圖的區(qū)域上創(chuàng)建一個白色的掩膜圖像,否則創(chuàng)建黑色, 然后將其作為掩碼mask傳遞即可。
- src1、src2:為輸入圖像或標(biāo)量,標(biāo)量可以為單個數(shù)值或一個四元組
- dst:可選輸出變量,如果需要使用非None則要先定義,且其大小與輸入變量相同
- mask:圖像掩膜,可選參數(shù),為8位單通道的灰度圖像,用于指定要更改的輸出圖像數(shù)組的元素,即輸出圖像像素只有mask對應(yīng)位置元素不為0的部分才輸出,否則該位置像素的所有通道分量都設(shè)置為0
返回值為結(jié)果圖像矩陣,如果dst傳入了實參,則返回值與dst對應(yīng) 實參相同。
import numpy as np import cv2 as cv from matplotlib import pyplot as plt# 1. 直接以灰度圖的方式讀入 img = cv.imread('./1.png', 0)# 2. 創(chuàng)建蒙版 mask = np.zeros(img.shape[:2], np.uint8) mask[100:150, 400:480] = 1 # 選定感興趣區(qū)域 1或255# 3.掩模 masked_img = cv.bitwise_and(img, img, mask=mask)# 4. 統(tǒng)計掩膜后圖像的灰度圖 mask_histr = cv.calcHist([img], [0], mask, [256], [0, 256])# 5. 圖像展示 fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8)) axes[0, 0].imshow(img, cmap=plt.cm.gray) axes[0, 0].set_title("原圖") axes[0, 1].imshow(mask, cmap=plt.cm.gray) axes[0, 1].set_title("蒙版數(shù)據(jù)") axes[1, 0].imshow(masked_img, cmap=plt.cm.gray) axes[1, 0].set_title("掩膜后數(shù)據(jù)") axes[1, 1].plot(mask_histr) axes[1, 1].grid() axes[1, 1].set_title("灰度直方圖") plt.show()掩膜后的數(shù)據(jù)
總結(jié)
以上是生活随笔為你收集整理的OpenCV 掩膜的应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV 直方图的计算和绘制
- 下一篇: OpenCV 自适应的直方图均衡化