四:OpenCV图片复制函数(C++/python)

OpenCV操作图片时经常需要拷贝一份操作,避免修改原数据,提供了2个函数进行快捷图像复制

1.clone
2.copyTo

1.函数 clone

定义:
Mat Mat::clone() const
作用:将图像进行复制

使用案例

# C++ code
#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp"
#include "iostream"
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
	Mat src = imread("demo.jpg", 1);
	namedWindow("src", 0);
	imshow("src", src);
	Mat dst;
	dst = src.clone(); #复制
	namedWindow("dst", 0);
	imshow("dst", dst);
	waitKey(0);
	return 0;
}

2.函数 copyTo

定义:
void copyTo(InputArray src, OutputArray dst, InputArray mask);
def copyTo(src, mask, dst=None)

参数:
src:输入图像
dst:输出图像
mask:掩码,可以为空

作用:将图像进行复制,可以设置掩码。

使用案例

# python code
#创建一张100*100 的三通道图片(注意需要和被复制图一样)
dst=np.zeros((100, 100, 3), np.uint8)
cv2.copyTo(out,dst)
plt.figure("dst")
plt.title("dst")
plt.imshow(dst)
plt.show()

#C++ code
#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp"
#include "iostream"
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
	Mat src = imread("demo.jpg", 0);
	namedWindow("src", 0);
	imshow("src", src);
	Mat copyImg;
	Mat dst;
	Size size(83, 83);
	Mat kernel;
	kernel = getStructuringElement(MORPH_ELLIPSE, size);
	morphologyEx(src, dst, MORPH_BLACKHAT, kernel);// MORPH_BLACKHAT  MORPH_TOPHAT
	threshold(dst, dst, 28, 255, 0);
	kernel = getStructuringElement(MORPH_ELLIPSE, Size(5, 5));
	morphologyEx(dst, dst, MORPH_CLOSE, kernel);
	copyTo(src, copyImg, dst); #将src图像复制到dst
	namedWindow("copyImg", 0);
	imshow("copyImg", copyImg);
	waitKey(0);
	return 0;
}

推荐

http://111.231.12.58/py/254.html
http://111.231.12.58/py/247.html