深入淺析OpenCV copyTo()函數

copyTo()

函數原型

copyTo這個函數有兩種定義方式,分別是:

void copyTo( OutputArray m ) const;
void copyTo( OutputArray m, InputArray mask ) const;

參數:

  • 一個參數:一張輸出圖像
  • 兩個參數:一張輸出圖像一個掩碼圖

簡單示例

例如:

image_in.copyTo(image_out);

就是把image_in這張圖復制(copy to)到image_out上。

又例如:

image_in.copyTo(image_out,mask);

則是不僅把image_in這張圖復制(copy to)到image_out上,且image_in對應mask中像素值為0的像素點都不會貼到image_out上。

總結上述兩個函數用法的作用:

  • 一個參數:表示將image_in矩陣復制到image_out中。
  • 兩個參數:表示得到一個附加掩膜mask的矩陣image_out

一個參數的很簡單就是復制圖像,上面讀mask用法探究不深,那麼我們繼續來探究一下mask參數的用法

mask參數深入探究

例如下面用法代碼:

A.copyTo(B, mask)

mask作為一個掩模板,如果在某個像素點(i, j)其值為1(隻看第一通道,所以mask單通道即可),則把A.at(i, j)處的值直接賦給B.at(i, j),如果其值為0則B.at(i, j)處保留其原始像素值。這樣能夠使得圖標邊緣的顏色和原圖保持一致。

例如下面具體用法

#include <iostream>
#include <math.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>  
using namespace cv;
using namespace std;
int main()
{
	Mat srcImage = imread("./test1.jpg");
	Mat dstImage = imread("./test.jpg");
	if (!srcImage.data || !dstImage.data)
	{
		cout << "could not load image !";
		return -1;
	}
	// namedWindow("圖1原始圖",);
	imshow("input_src1", srcImage);
	imshow("input_src2", dstImage);
	// 創建一個感興趣區域
	Mat imageROI = srcImage(Rect(0, 0, dstImage.cols, dstImage.rows));
	// 加載掩模板
	Mat mask = imread("./test.jpg", 0);
	// 進行復制
	dstImage.copyTo(imageROI, mask);
	// 顯示效果圖
	imshow("out_put", srcImage);
	waitKey(0);
	return 0;
}

運行效果圖:

在這裡插入圖片描述

到此這篇關於OpenCV copyTo()函數的文章就介紹到這瞭,更多相關OpenCV copyTo()函數內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: