1. 程式人生 > >opencv中copyTo函式的使用

opencv中copyTo函式的使用

我們已經知道的是,使用copyTo函式可以得到一個複製的矩陣。

A.copyTo(B);

就可以得到和A一毛一樣的矩陣B。當然需要事先宣告B。並且兩者可以互不相關的做各種操作。

copyTo還有一個重構函式copyTo(B,MASK)。意思是可以得到一個附加掩膜MASK的矩陣B。我們從影象的角度來看這個函式的作用。

首先需要生成一張掩膜MASK,一般情況下這個膜和你需要操作的物件影象一樣大。生成方法見下面例子:

Mat MASK(A.rows,A.cols,CV_8UC3,Scalar(0,0,0));//生成一個三通道的彩色掩膜,初始化為黑色。

Mat MASK(A.rows,A.cols,CV_8UC1
,Scalar(0));//生成一個灰度的掩膜,初始化為黑色。

Mat MASK=Mat::zeros(A.size( ), CV_8UC3);//生成一個三通道的彩色掩膜,初始化為黑色。需要改成灰度的只需把CV_8UC3改為CV_8UC1。

對一幅圖加一個掩膜顧名思義,就是想要蓋住圖片的某一部分。所以使用A.copyTo(B,MASK)之後得到的是A被MASK掩蓋後的影象。因為初始化的掩膜時黑色的,如果直接加上去整個圖片都會被掩蓋了,所以需要把一部分你不想蓋住的位置改成別的顏色。這裡就可以用到前面的設定ROI的演算法。

Mat mm=mask(Rect(0,0,mask.cols/2,mask.rows

));//設定一個只有掩膜一半大小的ROI

mm={Scalar(255,255,255)};//把ROI中的畫素值改為白色。

得到的掩膜效果如下圖:


對於灰度影象,掩蓋後在影象中掩膜中所有畫素值對應為0的點變為黑色(被掩蓋),其他點(所有非0值)和原來一致。

對於三通道彩色影象,某個通道中所有在掩膜中值為0的點在該通道上的畫素值變為0,其他所有非0值保持和原來不變。例如當對綠色和藍色通道加掩膜時會呈現一種影象被蓋了一層紅色的效果。(因為藍色和綠色被掩蓋了)

不管是灰度影象還是彩色影象,只有掩膜中畫素值為0的點會對影象產生掩蓋效果。

以下分別是黑色掩膜,紅色掩膜的效果圖:



相關推薦

OpencvcopyTo()函式的使用方法

https://www.cnblogs.com/phoenixdsg/p/8420716.html 在Mat矩陣類的成員函式中copyTo(roi , mask)函式是非常有用的一個函式,尤其是後面的mask可以實現蒙版的功能,我們用幾個例項來說明它的作用。我們要注意mask的資料型別,必須是C

OpenCVcopyTo()函式及Mask詳解(附程式碼詳解)

copyTo函式有兩種重構方式: 第一種:A.copyTo(B),表示將A矩陣複製到B中 第二種:A.copyTo(B, mask),表示得到一個附加掩膜mask的矩陣B。 第一種方法就不多贅述,這裡主要詳細敘述第二種使用方法。  對於第二種mask引數的格

opencvcopyTo函式的使用

我們已經知道的是,使用copyTo函式可以得到一個複製的矩陣。 A.copyTo(B); 就可以得到和A一毛一樣的矩陣B。當然需要事先宣告B。並且兩者可以互不相關的做各種操作。 copyTo還有一個重構函式copyTo(B,MASK)。意思是可以得到一個附加掩膜MASK的矩

OpenCV-Python官方文件三——在OpenCV繪製函式

在OpenCV中繪製函式 目標 · 學習使用OpenCV繪製不同的幾何形狀 · 您將學習以下函式:cv2.line(),cv2.circle(),cv2.rectangle(),cv2.ellipse(),cv2.putText()等。 程式碼  &nbs

最近鄰插值和雙線性插值的基本原理 以及OpenCVresize函式的用法改變影象的大小

最近鄰插值和雙線性插值的基本原理 影象的縮放很好理解,就是影象的放大和縮小。傳統的繪畫工具中,有一種叫做“放大尺”的繪畫工具,畫家常用它來放大圖畫。當然,在計算機上,我們不再需要用放大尺去放大或縮小影象了,把這個工作交給程式來完成就可以了。下面就來講講計算機怎麼來放大縮小圖象;在本文中,

OpenCVC++函式imread讀取圖片的問題

#include "stdafx.h" #include <cv.h> #include <highgui.h> #include <math.h> #include <stdlib.h> #include <s

OpenCVcvResize函式圖象放縮

                影象大小變換void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );src:輸入影象. dst:輸出影象. interpolation:差值方法: • CV_INTER_N

opencvRNG 函式釋義

RNG rng; // always produces 0 double a = rng.uniform(0, 1); // produces double from [0, 1) double a1 = rng.uniform((double)0, (double)1); // produces float

opencv時間函式的操作

計時函式:兩個簡單的計時函式,1.getTickCount()和getTickFrequency() getTickCount()函式返回CPU自某個時間以來走過的時鐘週期數 getTickFrequence()函式返回CPU一秒鐘所走的時鐘週期數這樣我們輕鬆可以以秒為單位對某運算進行計算計

opencvsplit()函式執行出錯

為什麼明明按照書本或程式碼一句一句敲的,還有錯誤? 錯誤如下: 0x1027FC43 (opencv_world300.dll) (split.exe 中)處有未經處理的異常:  0xC0000005:  寫入位置 0x00000000 時發生訪問衝突。 這是因為找

opencvaddWeighted()函式用法總結(05)

還是老習慣,分三步走。第一步,功能說明。第二步,結果圖顯示,第三步,API詳解。第四步,程式碼展示(註釋很詳細,保證所有有C++基礎的人都可以看懂。) 第一步,功能說明:addWeighted()函式是將兩張相同大小,相同型別的圖片融合的函式。他可以實現圖片的特效,不多說了

主動輪廓線模型Snake模型簡介&openCVcvSnakeImage()函式程式碼分析

主動輪廓線模型又稱為Snake模型,自Kass於1987年提出以來,已廣泛應用於數字影象分析和計算機視覺領域。由於Snake模型具有良好的提取和跟蹤特定區域內目標輪廓的能力,因此非常適合於醫學影象如CT和MR影象的處理,以獲得特定器官及組織的輪廓。簡單的來講,Snake模型就

opencvnamedWindow( )函式用法總結(02)

還是老習慣,分三步走。第一步,功能說明。第二步,結果圖顯示,第三步,API詳解。第四步,程式碼展示(註釋很詳細,保證所有有C++基礎的人都可以看懂。) 第一步,功能說明:namedWindow()的功能就是新建一個顯示視窗。可以指定視窗的型別。 第二步,結果圖顯示:我

opencvcreateTrackbar()函式用法總結(06)

在opencv中滑動條是很方便的一個測試函式,我們可以不需要更改程式就可以更改變數的值來觀察效果。 還是老習慣,分三步走。第一步,功能說明。第二步,結果圖顯示,第三步,API詳解。第四步,程式碼展示(註釋很詳細,保證所有有C++基礎的人都可以看懂。) 第一步,功能說明:用

Opencvreshape函式要注意的細節

#include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; void PrintMat( Mat &_m)

OpenCVfindContours函式的使用

從二值影象中找出物件的輪廓: OpenCV中函式findContours()用於中物件的輪廓,有兩種形式: 第一種: void findContours( InputOutputArray image, OutputArrayOfArrays contours,      

OpenCVfindcontours函式hierarchy輪廓層級詳解

最近在查閱OpenCV輪廓處理函式方面時,我發現有部分文章對findcontours函式中輪廓層級提取的描述有錯誤,特寫一篇有關輪廓提取方面的文章(僅僅介紹容易出錯的hierarchy層級輪廓)。 函式原型為:findContours(image,contours,hier

移動開發:OpenCVGPU函式

The OpenCV GPU module is a set of classes and functions to utilize GPU computational capabilities. It is implemented using NVIDIA* CUDA*

opencv計時函式

opencv中的計時函式有getTickCount()和getTickFrequency().1、getTickCount()函式:返回CPU自某個事件(如啟動電腦)以來走過的時鐘週期數2、getTickFrequency()函式:返回CPU一秒鐘所走的時鐘週期數因此只需要將

【短道速滑一】OpenCVcvResize函式使用雙線性插值縮小影象到長寬大小一半時速度飛快(比最近鄰還快)之異象解析和自我實現。

  今天,一個朋友想使用我的SSE優化Demo裡的雙線性插值演算法,他已經在專案裡使用了OpenCV,因此,我就建議他直接使用OpenCV,朋友的程式非常注意效率和實時性(因為是處理視訊),因此希望我能測試下我的速度和OpenCV相比到底那一個更有速度優勢,恰好前一段時間也有朋友有這方面的需求,因此我就隨意編