【无标题】OpenCV基础理论知识

Mat

mat是一个结构体,表示一个矩阵,可以是一个通道的,也可以是3个通道。它有头部和底部之分,头部代表这个矩阵的属性,底部代表的是数据。
在这里插入图片描述
其中CV_8UC3代表每个像素是8位的,U是表示无符号的,C3表示有三个通道

Mat的拷贝

浅拷贝 只是把mat的头部复制了一份,数据还是指向同一块,
Mat a = imread(file, IMREAD_COLOR)
Mat B(a) 把a复制给B,这是浅拷贝
如下图所示
**在这里插入图片描述**
Mat的深拷贝 把属性和数据全部拷贝出来,方法有

CV::Mat::clone()
CV::Mat::copyTo()
copy()

以下代码验证浅拷贝与深拷贝

import cv2
import numpy as np
img = cv2.imread('d:\\STUDY_OPENCV\\img\\2.jpg')

#浅拷贝
img2 = img

#深拷贝
img3 = img.copy()

img[10:100,10:100] = [0,0,255]#img改变了,img2也跟着改变
cv2.imshow('img',img)
cv2.imshow('img2',img2)
cv2.imshow('img3',img3)

cv2.waitKey(0)


访问图像mat的一些基本属性

import cv2
import numpy as np
img = cv2.imread('d:\\STUDY_OPENCV\\img\\2.jpg')

#shape 属性中包括了三个信息,高度,长度,通道数
print(img.shape)
#图像占多大空间
#高度*长度*通道数
print(img.size)
#图像中每个元素的位深
print(img.dtype)

打印出来如下
在这里插入图片描述

图像通道的分离与合并

**split(mat)**把n个通道的图像分离成n个通道
**merge((ch1,ch2,ch3,…))**把多个通道合并成一个图像

import cv2
import numpy as np

img = np.zeros((480,640,3),np.uint8)
#img = cv2.imread('d:\\STUDY_OPENCV\\img\\2.jpg')
#分离通道
b,g,r = cv2.split(img)
b[10:100,10:100] = 255#分离出来的图片相当于只有一个通道,黑白颜色图片
g[10:100,10:100] = 255
print(b[400,250])
print(g[400,250])

#合并通道
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)

最后img2【10:100,10:100】矩阵是青色的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值