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; }
推荐