OpenCV mask的作用及如何制作掩模mask
前言
OpenCV中的很多函數(shù)用到mask,mask是什么?怎么作一個(gè)mask?將是本文的主要內(nèi)容。
一、mask是什么?
mask 不是馬斯克,是掩膜,可以用來(lái)遮蓋非感興趣區(qū),突出感興趣區(qū),使得圖像處理只專注于ROI部分。
二、OpenCV生成mask的幾種方法
注意:mask最終需要與要作用到的輸入圖像的尺寸與類型保持一致
矩形
#include <opencv2/opencv.hpp> using namespace cv; int main() { Mat src = imread("img1.png", IMREAD_GRAYSCALE); imshow("src", src); // 定義mask,大小640*480,像素全0 Mat mask = cv::Mat::zeros(Size(640, 480), CV_8UC1); // 作一個(gè)從坐標(biāo)(220,120),寬200,高200的矩形框,框內(nèi)填充白色,從方法1,2,3中任選一 // 方法1 rectangle(mask, cv::Rect(220, 120, 200, 200), Scalar(255), -1); // 方法2 mask(cv::Rect(320, 50, 240, 310)) = 255; // 方法3 mask(cv::Rect(320, 50, 240, 310)).setTo(255); Mat dst; // 將src中對(duì)應(yīng)對(duì)應(yīng)掩膜ROI中區(qū)域拷貝到dst src.copyTo(dst, mask); imshow("mask",mask); imshow("dst", dst); waitKey(); return 0; }
運(yùn)行結(jié)果如下:
src
mask
dst
圓形
同理
#include <opencv2/opencv.hpp> using namespace cv; int main() { Mat src = imread("img1.png", IMREAD_GRAYSCALE); // 定義mask,大小640*480,像素全0 Mat mask = cv::Mat::zeros(Size(640, 480), CV_8UC1); // 作一個(gè)以點(diǎn)坐標(biāo)(320,50)為圓心,150為半徑的圓,圓內(nèi)填充白色 circle(mask, Point(440, 205), 150, Scalar(255),-1); Mat dst; // 將src中對(duì)應(yīng)對(duì)應(yīng)掩膜ROI中區(qū)域拷貝到dst src.copyTo(dst, mask); imshow("mask",mask); imshow("dst", dst); waitKey(); return 0; }
mask
dst
mask可以是各種形狀,各式各樣,方法也有很多,這里只略舉一二。
總結(jié)
定義mask,設(shè)置ROI,將ROI內(nèi)部填充白色,其他填充黑色,即可對(duì)ROI區(qū)域操作,遮蓋其他區(qū)域。也可以將mask反轉(zhuǎn),遮蓋矩形框內(nèi)數(shù)據(jù),處理框外數(shù)據(jù)。
到此這篇關(guān)于OpenCV mask的作用及如何制作掩模mask的文章就介紹到這了,更多相關(guān)OpenCV mask掩模內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++小練習(xí)之高性能實(shí)現(xiàn)字符串分割
字符串分割是日常工作中比較常見(jiàn)的基礎(chǔ)函數(shù),通常大家會(huì)使用現(xiàn)成的基礎(chǔ)庫(kù),基礎(chǔ)庫(kù)的性能是否是最佳的,本文主要和大家探討一下如何最大限度的提升字符串分割的性能,希望對(duì)大家有所幫助2023-10-10C語(yǔ)言中const和C++中的const 區(qū)別詳解
這篇文章主要介紹了C語(yǔ)言中const和C++中的const 區(qū)別詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04Qt學(xué)習(xí)教程之對(duì)話框消失動(dòng)畫(huà)效果
這篇文章主要給大家介紹了關(guān)于Qt學(xué)習(xí)教程之對(duì)話框消失動(dòng)畫(huà)效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07C/C++?Qt?TabWidget?實(shí)現(xiàn)多窗體創(chuàng)建詳解
TabWidget組件配合自定義Dialog組件,可實(shí)現(xiàn)一個(gè)復(fù)雜的多窗體分頁(yè)結(jié)構(gòu)。這篇文章就主要介紹了如何通過(guò)TabWidget實(shí)現(xiàn)多窗體的創(chuàng)建,感興趣的小伙伴可以了解一下2021-12-12C++基于QWidget和QLabel實(shí)現(xiàn)圖片縮放,拉伸與拖拽
這篇文章主要為大家詳細(xì)介紹了C++如何基于QWidget和QLabel實(shí)現(xiàn)圖片縮放、拉伸與拖拽等功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單掃雷小程序
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單掃雷小程序,一款大眾類的益智小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10