目录
Mat深拷贝与浅拷贝
访问图像(Mat)的属性
通道的分离与合并
Mat是什么?
是一个矩阵,灰色图像2通道,彩色图像3通道。
Mat的优点:可以Numpy以矩阵的方式进行访问, *** 作方便。
Mat深拷贝与浅拷贝
拷贝Mat时默认为浅拷贝,只拷贝Header中的内容,数据不变
Mat浅拷贝
Mat A
A = imread(file, IMREAD_COLOR)
Mat B(A);
B与A的Header不同,但指向的数据相同
Mat深拷贝
C++中实现方式有两种
cv ::Mat::clone()
cv::Mat::copyTo()
将DATA也重新赋值一份,A与B完全切断
python中实现:
copy(),使用该方法就是深拷贝
进行深拷贝后,进行图片的处理时不影响原图片,cv2.add也是深拷贝 *** 作
实际测试:
import cv2
import numpy as np
img = cv2.imread('C:\Users\Mengyang\Desktop\112.png')
#浅拷贝
img2 = img
#深拷贝
img3 = img.copy()
img[10:100,10:100] = [0,0,255]
cv2.imshow('img',img)
cv2.imshow('img2',img2)
cv2.imshow('img3',img3)
cv2.waitKey(0)
运行结果:
访问图像(Mat)的属性主要为使用print()函数打印输出图像的参数
import cv2
import numpy as np
img = cv2.imread('C:\Users\Mengyang\Desktop\112.png')
print(img.shape) #shape中包含三个信息,长度 宽度 通道数
print(img.size) #图像占用多大的空间,长度*宽度*通道数
print(img.dtype) #图像中每个元素的位深 uint8表示8位无符号整型0~255
运行结果:
通道的分离与合并正常的图片含有3个通道,BGR,通道的分离与合并主要采用2个API
split(mat) 分割图像的通道
merge((ch1,ch2,...)) 将多个通道合并在一起,输出为一个mat
import cv2
import numpy as np
img = np.zeros((480,640,3),np.uint8)
b,g,r = cv2.split(img) #分离通道
b[10:100,10:100] = 255 #分离出来后即为黑白单色
g[10:100,10:100] = 255 #分离出来后即为黑白单色
img2 = cv2.merge((b,g,r)) #通道合并
cv2.imshow('img',img)
cv2.imshow('b',b)
cv2.imshow('g',g)
cv2.imshow('img2',img2)
cv2.waitKey(0)
运行结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)