OpenCV_03 Numpy库和Mat
前言
主要学习Numpy库的相关操作和Mat的基础知识。
目录
- 前言
- 一、Numpy基本操作
- 1.创建矩阵
- 创建数组array()
- 创建全0/1数组zeros()/ones()
- 创建全值数组full()
- 单位矩阵identity()/eye()
- 2.检索与赋值
- 3.获取子矩阵Region of Image(ROI)
- 二、Mat结构体
- 1.Mat的实现
- 2.Mat拷贝
- Mat浅拷贝
- Mat深拷贝
- 3.访问图像(Mat)属性
- 4.通道的分离与合并
一、Numpy基本操作
1.创建矩阵
创建数组array()
a = np.array([2,3,4])
b = np.array([[1, 2], [3, 4]])
创建全0/1数组zeros()/ones()
c = np.zeros((3, 4, 2), np.uint8)
d = np.ones((3, 4, 2), np.uint8)
(3, 4, 2):(行数,列数,通道数/层数,即2个3x4的矩阵)
np.uint8:矩阵中元素数据类型
注:print函数由于解释不同,生成3个4x2的矩阵,但OpenCV解释成2个3x4的矩阵。
创建全值数组full()
e = np.full((8, 8), 255, np.uint8)
print(e)
单位矩阵identity()/eye()
f = np.identity(4) #identity(方阵阶数)
g = np.eye((5, 7), k = 2) # eye可以生成长方形的矩阵,k表示前k列全为0
2.检索与赋值
下标法:
[y, x],y在前,x在后。
[y, x, channel],加了一个通道
程序:纯黑界面画一条蓝色的线
import numpy as np
import cv2img = np.zeros((480, 640, 3), np.uint8)
count = 0
while count < 200:# img[count, 100, 0] = 255img[count, 100] = [255, 0, 0] #上下两条语句都可以赋值count += 1cv2.imshow('img', img)
key = cv2.waitKey(10000)
if(key & 0xFF ==ord('q') ):cv2.destroyAllWindows()
3.获取子矩阵Region of Image(ROI)
[y1:y2,x1:x2]
从图像img取一小块到roi程序
img = np.zeros((480, 640, 3), np.uint8)
roi = img[100:400, 100:500]
roi[:, :] = [0, 0, 255]
二、Mat结构体
Mat实质上是一个矩阵,例如黑白图片是单通道的矩阵,而彩色图片就是3通道(分别表示B、G、R)的矩阵。因此Mat可以通过Numpy以矩阵方式操作。
1.Mat的实现
Mat由Header和Data两部分构成,Data就是图片的数据,Header则是一些属性信息
2.Mat拷贝
由于图像数据较大,Mat数据默认进行浅拷贝,即只拷贝Header部分,而共用Data,
Mat浅拷贝
通过"="进行的赋值操作默认都是浅拷贝。
Mat A
A = imread(file, IMREAD_COLOR)
Mat B(A); #构造函数,并用A进行列表初始化
Mat深拷贝
底层C++有两种方法实现深拷贝
cv::Mat::clone()
cv::Mat::copyTo()
Python中则通过函数copy()实现深拷贝。
程序演示
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)
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)
key = cv2.waitKey(0)
if(key & 0xFF ==ord('q') ):cv2.destroyAllWindows()
3.访问图像(Mat)属性
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)#shape属性包含3个信息(高,长,通道数)
print("shape:", img.shape)#size =高*长*通道数(占用空间)
print("size:", img.size)# dtype是每个元素的位深
print("dtype:", img.dtype)
4.通道的分离与合并
分离 split(mat)
合并 merge((ch1, ch2, …))
示例程序
import cv2
import numpy as npimg = 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('img2', img2)
cv2.waitKey(0)
OpenCV_03 Numpy库和Mat相关推荐
- numpy库中的mat和array使用小结
numpy的导入和使用: from numpy import *; 矩阵Mat的创建 1.由一维或二维数据创建矩阵 a1=array([1,2,3]); a1=mat(a1); 由列表list创建矩阵 ...
- 机器学习中的Numpy库基础——向量、矩阵和数组
1.Numpy简介 Numpy是Python机器学习技术栈的基础. Numpy可以对机器学习中常用的数据结构--向量(vector).矩阵(matrice).张量(tensor)--进行高效的操作. ...
- python中mean的用法_python 的numpy库中的mean()函数用法介绍
1. mean() 函数定义: numpy.mean(a, axis=None, dtype=None, out=None, keepdims=)[source] Compute the arithm ...
- [基础库Numpy] 技能树总结:一篇文章学会Numpy库
目录 1.基础库的下载 (1)终端窗口下载安装 (2)包管理器搜索下载 2.Numpy库常用API简介 (1)创建数组 #构造法 #特殊值法 #随机数法 #定长分割法 #重复构造法 #网格构造法 (2 ...
- python 的numpy库中的mean()函数用法介绍
这篇文章主要介绍了python 的numpy库中的mean()函数用法介绍,具有很好对参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 mean() 函数定义: 2 mean()函数功能: 求取均 ...
- Numpy库及ndarrary基础知识
Numpy简介 Numpy是一个开源的Python科学计算基础库. 一个强大的N维数组对象 ndarray 广播功能函数 整合C/C++/Fortran代码的工具 线性代数.傅里叶变换.随机数生成等功 ...
- python中的numpy库有什么优缺点_python中关于numpy库的介绍
1.Numpy是什么? NumPy(Numerical Python的缩写)是一个开源的Python科学计算库.使用NumPy,就可以很自然地使用数组和矩阵. NumPy包含很多实用的数学函数,涵盖线 ...
- python average函数怎么用_python 的numpy库中的mean()函数用法介绍
1. mean() 函数定义: numpy.mean(a, axis=None, dtype=None, out=None, keepdims=)[source] Compute the arithm ...
- python学习笔记之numpy库的使用——超详细
文章目录 NumPy介绍 一.如何创建 1.导入Numpy库,并命名为np: 2.查看版本 3.通过列表创建一维数组: 4.通过列表创建二维数组: 5.创建全为0的二维数组 6.创建全为1的三维数组 ...
最新文章
- kali2018.2安装配置OpenVAS-9及错误处置
- Softmax算法:逻辑回归的扩展
- 3COM小型办公室有线局域网方案
- 开多个bitset和bitset的基本使用
- tracepro应用实例详解_离心铸造工艺(实例)
- lwip连续发数据卡死_Mysteel:12月全球铁矿石发运量稳中微增 进口矿咋走?
- 支付宝:提现免费再延3年,不设上限!
- java最广泛的运行环境_Java运行环境下载|Java SE Runtime Environment(Java运行环境)8.0.131 官方多语言正式版_ - 极光下载站...
- Web定时器 - Timer
- unity3d_打飞碟
- Invalid injected android support version ‘202.7660.26.42.7322048‘, expected to be of the form ‘w.x.y
- Java程序编译及打包
- QT中的.pro文件,以及.pri .prj .prl文件说明
- 用计算机怎么算异分母加减法,怎么正确算异分母分数加减法
- 判断两个矩形是否相交
- IEEE 投稿参考文献格式bib
- 首席新媒体运营黎想教程:海报裂变活动怎么做?4个必备技巧
- STRAIGHT_JOIN
- 基于 DirectShow 实现 SourceFilter 常见问题分析
- vue+播放直播视频流(websocket的流文件)
热门文章
- Android studio 出现一直在同步Syncing only active variant
- Qt实现简易的浏览器
- 日常积累6:提取并拟合图片中的曲线
- 嵌入式应用开发在线图书网址
- 微信小程序 Page pages/Index/Index has not been registered yet.问题解决
- USB-IF BC1.2充电协议解读
- 【LeetCode - Java】14. 最长公共前缀 (简单)
- 【100%通过率】华为OD机试真题 C++ 实现【最接近最大输出功率的设备 /查找充电设备组合】
- 上buff——状态模式
- matlab图加上箭头和标注实例