校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Opencv圖像處理之詳解掩膜mask

Opencv圖像處理之詳解掩膜mask

熱門標簽:ai地圖標注 廈門crm外呼系統如何 地圖標注推廣單頁 如何在地圖標注文字 女王谷地圖標注 西藏快速地圖標注地點 n400電話申請多少錢 長春人工智能電銷機器人官網 百應ai電銷機器人鄭州

1.在OpenCV中我們經常會遇到一個名字:Mask(掩膜)。很多函數都使用到它,那么這個Mask到底什么呢?

2.如果我們想要裁剪圖像中任意形狀的區域時,應該怎么辦呢?
答案是,使用掩膜(masking)。
我們先看一下掩膜的基礎。圖像的位運算。

圖像基本運算

圖像的基本運算有很多種,比如兩幅圖像可以相加、相減、相乘、相除、位運算、平方根、對數、絕對值等;圖像也可以放大、縮小、旋轉,還可以截取其中的一部分作為ROI(感興趣區域)進行操作,各個顏色通道還可以分別提取及對各個顏色通道進行各種運算操作。總之,對于圖像可以進行的基本運算非常的多,只是挑了些常用的操作詳解。

bitwise_and、bitwise_or、bitwise_xor、bitwise_not這四個按位操作函數。
void bitwise_and(InputArray src1, InputArray src2,OutputArray dst, InputArray mask=noArray()); //dst = src1  src2
void bitwise_or(InputArray src1, InputArray src2,OutputArray dst, InputArray mask=noArray()); //dst = src1 | src2
void bitwise_xor(InputArray src1, InputArray src2,OutputArray dst, InputArray mask=noArray()); //dst = src1 ^ src2
void bitwise_not(InputArray src, OutputArray dst,InputArray mask=noArray()); //dst = ~src

上述的基本操作中都屬于將基礎數學運算應用于圖像像素的處理中,下面將著重介紹

bitwise_and是對二進制數據進行“與”操作,即對圖像(灰度圖像或彩色圖像均可)每個像素值進行二進制“與”操作,11=1,10=0,01=0,00=0
bitwise_or是對二進制數據進行“或”操作,即對圖像(灰度圖像或彩色圖像均可)每個像素值進行二進制“或”操作,1|1=1,1|0=0,0|1=0,0|0=0
bitwise_xor是對二進制數據進行“異或”操作,即對圖像(灰度圖像或彩色圖像均可)每個像素值進行二進制“異或”操作,1^1=0,1^0=1,0^1=1,0^0=0
bitwise_not是對二進制數據進行“非”操作,即對圖像(灰度圖像或彩色圖像均可)每個像素值進行二進制“非”操作,~1=0,~0=1

為了便于大家進一步理解,下面給出測試代碼:

# opencv 圖像的基本運算
 
# 導入庫
import numpy as np
import argparse
import cv2
 
# 構建參數解析器
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
args = vars(ap.parse_args())
 
# 加載圖像
image = cv2.imread(args["image"])
cv2.imshow("image loaded", image)
 
# 創建矩形區域,填充白色255
rectangle = np.zeros(image.shape[0:2], dtype="uint8")
cv2.rectangle(rectangle, (25, 25), (275, 275), 255, -1) # 修改這里
cv2.imshow("Rectangle", rectangle)
 
# 創建圓形區域,填充白色255
circle = np.zeros(image.shape[0:2], dtype="uint8")
cv2.circle(circle, (150, 150), 150, 255, -1) # 修改
cv2.imshow("Circle", circle)
 
 
# 在此例(二值圖像)中,以下的0表示黑色像素值0, 1表示白色像素值255
# 位與運算,與常識相同,有0則為0, 均無0則為1
bitwiseAnd = cv2.bitwise_and(rectangle, circle)
cv2.imshow("AND", bitwiseAnd)
cv2.waitKey(0)
 
 
 
# 非運算,非0為1, 非1為0
bitwiseNot = cv2.bitwise_not(circle)
cv2.imshow("NOT", bitwiseNot)
cv2.waitKey(0)
 
# 或運算,有1則為1, 全為0則為0
bitwiseOr = cv2.bitwise_or(rectangle, circle)
cv2.imshow("OR", bitwiseOr)
cv2.waitKey(0)
 
# 異或運算,不同為1, 相同為0
bitwiseXor = cv2.bitwise_xor(rectangle, circle)
cv2.imshow("XOR", bitwiseXor)
cv2.waitKey(0)
 
 

可以看到,原圖是一張星空夜景圖。

效果如下:




為了便于展示,后面我只截取部分區域效果:



掩膜(mask)

在有些圖像處理的函數中有的參數里面會有mask參數,即此函數支持掩膜操作,首先何為掩膜以及有什么用,如下:
數字圖像處理中的掩膜的概念是借鑒于PCB制版的過程,在半導體制造中,許多芯片工藝步驟采用光刻技術,用于這些步驟的圖形“底片”稱為掩膜(也稱作“掩模”),其作用是:在硅片上選定的區域中對一個不透明的圖形模板遮蓋,繼而下面的腐蝕或擴散將只影響選定的區域以外的區域。
圖像掩膜與其類似,用選定的圖像、圖形或物體,對處理的圖像(全部或局部)進行遮擋,來控制圖像處理的區域或處理過程。

數字圖像處理中,掩模為二維矩陣數組,有時也用多值圖像,圖像掩模主要用于:
①提取感興趣區,用預先制作的感興趣區掩模與待處理圖像相乘,得到感興趣區圖像,感興趣區內圖像值保持不變,而區外圖像值都為0。
②屏蔽作用,用掩模對圖像上某些區域作屏蔽,使其不參加處理或不參加處理參數的計算,或僅對屏蔽區作處理或統計。
③結構特征提取,用相似性變量或圖像匹配方法檢測和提取圖像中與掩模相似的結構特征。
④特殊形狀圖像的制作。

在所有圖像基本運算的操作函數中,凡是帶有掩膜(mask)的處理函數,其掩膜都參與運算(輸入圖像運算完之后再與掩膜圖像或矩陣運算)。

掩膜實例

如開篇所提問題2,要對一幅圖進行摳圖(裁剪)操作,這就要用到Mask了,那么就以摳圖為例,解釋Mask在里面的作用。同樣以上圖為例,從原圖中裁剪小樹。

我們利用OR結果(其他結果也行),修改調整后,

代碼如下:

# opencv 圖像的基本運算
 
# 導入庫
import numpy as np
import argparse
import cv2
 
# 構建參數解析器
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
args = vars(ap.parse_args())
 
# 加載圖像
image = cv2.imread(args["image"])
cv2.imshow("image loaded", image)
 
# 創建矩形區域,填充白色255
rectangle = np.zeros(image.shape[0:2], dtype="uint8")
cv2.rectangle(rectangle, (360, 348), (660, 570), 255, -1) # 修改這里
cv2.imshow("Rectangle", rectangle)
 
# 創建圓形區域,填充白色255
circle = np.zeros(image.shape[0:2], dtype="uint8")
cv2.circle(circle, (520, 455), 140, 255, -1) # 修改
cv2.imshow("Circle", circle)
 
''' 
# 在此例(二值圖像)中,以下的0表示黑色像素值0, 1表示白色像素值255
# 位與運算,與常識相同,有0則為0, 均無0則為1
bitwiseAnd = cv2.bitwise_and(rectangle, circle)
cv2.imshow("AND", bitwiseAnd)
cv2.waitKey(0)
# 非運算,非0為1, 非1為0
bitwiseNot = cv2.bitwise_not(circle)
cv2.imshow("NOT", bitwiseNot)
cv2.waitKey(0)
# 異或運算,不同為1, 相同為0
bitwiseXor = cv2.bitwise_xor(rectangle, circle)
cv2.imshow("XOR", bitwiseXor)
cv2.waitKey(0)
'''
# 或運算,有1則為1, 全為0則為0
bitwiseOr = cv2.bitwise_or(rectangle, circle)
cv2.imshow("OR", bitwiseOr)
cv2.waitKey(0)
# 使用mask
mask = bitwiseOr
cv2.imshow("Mask", mask)
 
# Apply out mask -- notice how only the person in the image is cropped out
masked = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow("Mask Applied to Image", masked)
cv2.waitKey(0)

結果展示:




簡單說就是:

與或非異或運算與我們的常識類似。掩膜操作就是兩幅圖像(numpy數組)的位運算操作。

附錄:C++ 版

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include iostream>
#include stdio.h>
 
using namespace std;
using namespace cv;
 
int main()
{
  Mat image, mask;
  Rect r1(100, 100, 250, 300);
  Mat img1, img2, img3, img4;
  image = imread("lol17.jpg");
  mask = Mat::zeros(image.size(), CV_8UC1);
  mask(r1).setTo(255);
  img1 = image(r1);
  image.copyTo(img2, mask);
 
  image.copyTo(img3);
  img3.setTo(0, mask);
 
 
  imshow("Image sequence", image);
  imshow("img1", img1);
  imshow("img2", img2);
  imshow("img3", img3);
  imshow("mask", mask);
 
  waitKey();
  return 0;
}

原始圖:


注意程序中的這兩句關于Mask的操作。

mask = Mat::zeros(image.size(), CV_8UC1); 
mask(r1).setTo(255); //r1是設置好的感興趣區域

解釋一下上面兩句的操作。

第一步建立與原圖一樣大小的mask圖像,并將所有像素初始化為0,因此全圖成了一張全黑色圖。第二步將mask圖中的r1區域的所有像素值設置為255,也就是整個r1區域變成了白色。

這樣就能得到Mask圖像了。

注意這句,哪個圖像拷貝到哪個圖像?

image.copyTo(img2, mask);

當然是原始圖image拷貝到目的圖img2上。
其實拷貝的動作完整版本是這樣的:

原圖(image)與掩膜(mask)進行與運算后得到了結果圖(img2)。

何為圖與掩膜的與運算?

其實就是原圖中的每個像素和掩膜中的每個對應像素進行與運算。比如1 1 = 1;1 0 = 0;

比如一個3 * 3的圖像與3 * 3的掩膜進行運算,得到的結果圖像就是:

說白了,mask就是位圖啊,來選擇哪個像素允許拷貝,哪個像素不允許拷貝。如果mask像素的值是非0的,我就拷貝它,否則不拷貝。

因為我們上面得到的mask中,感興趣的區域是白色的,表明感興趣區域的像素都是非0,而非感興趣區域都是黑色,表明那些區域的像素都是0。一旦原圖與mask圖進行與運算后,得到的結果圖只留下原始圖感興趣區域的圖像了。也正如下圖所示。

image.copyTo(img2, mask);

如果想要直接摳出目標區域,直接這樣寫就OK了:

img1 = image(r1);

參考文獻:

1.https://www.cnblogs.com/skyfsm/p/6894685.html

到此這篇關于Opencv圖像處理之詳解掩膜mask的文章就介紹到這了,更多相關Opencv 掩膜內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python使用opencv對圖像mask處理的方法
  • 超詳細注釋之OpenCV制作圖像Mask

標簽:黔東 內江 渭南 興安盟 拉薩 廊坊 亳州 綿陽

巨人網絡通訊聲明:本文標題《Opencv圖像處理之詳解掩膜mask》,本文關鍵詞  Opencv,圖像處理,之,詳解,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Opencv圖像處理之詳解掩膜mask》相關的同類信息!
  • 本頁收集關于Opencv圖像處理之詳解掩膜mask的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    九九九久久久精品| 欧美妇女性影城| 国产乱码一区二区三区| 蜜臀久久99精品久久久久久9| 午夜av一区二区三区| 久久精品国产成人一区二区三区 | 欧美mv日韩mv国产| 国产免费久久精品| 亚洲va国产va欧美va观看| 视频一区在线视频| 国产一区二区美女| 欧美性生活一区| 日本一区二区三区dvd视频在线| 亚洲韩国一区二区三区| 亚洲第一搞黄网站| 91日韩一区二区三区| 国产欧美日韩激情| 天天综合网 天天综合色| 91亚洲精华国产精华精华液| 日韩亚洲电影在线| 青青青伊人色综合久久| 色哟哟一区二区在线观看 | 亚洲素人一区二区| 福利电影一区二区三区| 欧美xxx久久| 男人的天堂久久精品| 日韩欧美一区二区免费| 日本午夜精品一区二区三区电影| 色婷婷综合五月| 国产精品看片你懂得| 成人va在线观看| 亚洲视频在线一区| 欧美日韩免费不卡视频一区二区三区| 中文字幕一区av| 色哟哟一区二区在线观看| 午夜av区久久| 久久精品一区蜜桃臀影院| 国产精品一区二区x88av| 中文字幕一区二区三区在线不卡| 成人亚洲一区二区一| 国产精品嫩草影院com| 色菇凉天天综合网| 日韩欧美国产午夜精品| 国产精品资源站在线| 亚洲欧美中日韩| 欧美精品第1页| 国产成人精品三级麻豆| 最新热久久免费视频| 日韩一区二区视频在线观看| 捆绑调教美女网站视频一区| 国产精品福利一区| 欧美天天综合网| 国产91露脸合集magnet| 一区二区三区精品在线| 欧美精品一区二区在线观看| 欧美视频完全免费看| 国产精品66部| 免费看黄色91| 全国精品久久少妇| 亚洲一区二区三区三| 亚洲欧洲三级电影| 久久嫩草精品久久久久| 欧美影院精品一区| youjizz国产精品| 国产老妇另类xxxxx| 蜜臀va亚洲va欧美va天堂 | 成人深夜视频在线观看| 成人黄色一级视频| 成人午夜激情影院| 国产mv日韩mv欧美| 成人app网站| 国产91丝袜在线播放| 精品无人码麻豆乱码1区2区 | 国产在线看一区| 久久精品国产亚洲高清剧情介绍 | 色综合咪咪久久| 一道本成人在线| 欧美日韩精品一区二区| 欧美伦理视频网站| 精品日韩一区二区三区免费视频| 欧美老肥妇做.爰bbww视频| 国产成人免费视频网站| 一级中文字幕一区二区| 午夜日韩在线电影| 日韩国产欧美三级| 国产在线不卡一区| 岛国精品在线播放| 国产69精品久久99不卡| 欧美日本精品一区二区三区| 91福利精品视频| 精品久久久久一区| 国产精品不卡一区二区三区| 一区二区三区高清在线| 精品在线一区二区| 99精品欧美一区二区蜜桃免费| 91亚洲精品一区二区乱码| 色综合久久久久| 日韩欧美电影在线| 一区二区三区产品免费精品久久75| 亚洲一区国产视频| 成人黄色片在线观看| 欧美视频精品在线观看| 久久久久久久综合狠狠综合| 337p亚洲精品色噜噜| 不卡的电视剧免费网站有什么| 欧美日韩国产综合视频在线观看| 91精品国产综合久久久久| 亚洲三级在线看| 欧美色倩网站大全免费| 懂色av中文一区二区三区| 欧美高清你懂得| 有码一区二区三区| 亚洲国产精品嫩草影院| 91香蕉国产在线观看软件| 日韩免费观看高清完整版| 久88久久88久久久| 精品噜噜噜噜久久久久久久久试看| 亚洲情趣在线观看| 粉嫩aⅴ一区二区三区四区五区 | 亚洲va天堂va国产va久| 日本精品一区二区三区高清| 色综合天天综合色综合av| 欧美精品自拍偷拍动漫精品| 国产精品久久夜| 色婷婷久久久久swag精品 | av电影天堂一区二区在线观看| 欧美电影免费观看高清完整版| 中文字幕一区二区三区四区| 色综合色综合色综合色综合色综合| 欧美国产日韩在线观看| 国产大片一区二区| 亚洲天天做日日做天天谢日日欢| 不卡在线观看av| 亚洲成a人v欧美综合天堂| 一本色道亚洲精品aⅴ| 免费高清在线一区| 亚洲天天做日日做天天谢日日欢| 欧美日韩国产影片| 亚洲综合色噜噜狠狠| 久久久午夜电影| 色偷偷久久人人79超碰人人澡| 精品无码三级在线观看视频| 国产亚洲女人久久久久毛片| 秋霞电影网一区二区| 中文字幕五月欧美| 日韩一区国产二区欧美三区| 国产1区2区3区精品美女| 国产一区二区三区四区五区入口 | 亚洲一区二区三区四区五区黄| 国产亚洲欧洲997久久综合| 三级精品在线观看| 国产精品黄色在线观看 | 国产乱色国产精品免费视频| 亚洲美女屁股眼交3| 91行情网站电视在线观看高清版| 日韩精品视频网| 狠狠色丁香婷婷综合| 久久不见久久见免费视频1| 久久精品人人爽人人爽| 国产偷国产偷精品高清尤物 | 国产成人8x视频一区二区 | 337p粉嫩大胆色噜噜噜噜亚洲| 在线观看日韩av先锋影音电影院| 大陆成人av片| 高清不卡一区二区| 日本福利一区二区| 日本亚洲三级在线| 一本久久a久久精品亚洲| 从欧美一区二区三区| av在线综合网| 色婷婷av一区| 久久先锋影音av| 中文字幕亚洲欧美在线不卡| 亚洲综合久久久| 国模少妇一区二区三区| 在线免费观看视频一区| wwwwww.欧美系列| 亚洲乱码国产乱码精品精可以看| 麻豆免费看一区二区三区| 男女视频一区二区| 欧美色成人综合| 日本一区二区三区国色天香| 一区二区三区精品在线| 国模无码大尺度一区二区三区| 欧美一区二区播放| 久久久精品黄色| 久久国产精品99久久人人澡| 91国在线观看| 国产日韩精品久久久| 美女任你摸久久| 欧美日韩一卡二卡| 一级特黄大欧美久久久| 波多野结衣亚洲| 中文字幕精品一区| 黑人精品欧美一区二区蜜桃| 日韩欧美aaaaaa| 久久精品国产一区二区三| 日韩欧美一卡二卡| 国产真实乱偷精品视频免| 中文子幕无线码一区tr|