前言

主要学习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相关推荐

  1. numpy库中的mat和array使用小结

    numpy的导入和使用: from numpy import *; 矩阵Mat的创建 1.由一维或二维数据创建矩阵 a1=array([1,2,3]); a1=mat(a1); 由列表list创建矩阵 ...

  2. 机器学习中的Numpy库基础——向量、矩阵和数组

    1.Numpy简介 Numpy是Python机器学习技术栈的基础. Numpy可以对机器学习中常用的数据结构--向量(vector).矩阵(matrice).张量(tensor)--进行高效的操作. ...

  3. python中mean的用法_python 的numpy库中的mean()函数用法介绍

    1. mean() 函数定义: numpy.mean(a, axis=None, dtype=None, out=None, keepdims=)[source] Compute the arithm ...

  4. [基础库Numpy] 技能树总结:一篇文章学会Numpy库

    目录 1.基础库的下载 (1)终端窗口下载安装 (2)包管理器搜索下载 2.Numpy库常用API简介 (1)创建数组 #构造法 #特殊值法 #随机数法 #定长分割法 #重复构造法 #网格构造法 (2 ...

  5. python 的numpy库中的mean()函数用法介绍

    这篇文章主要介绍了python 的numpy库中的mean()函数用法介绍,具有很好对参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 mean() 函数定义: 2 mean()函数功能: 求取均 ...

  6. Numpy库及ndarrary基础知识

    Numpy简介 Numpy是一个开源的Python科学计算基础库. 一个强大的N维数组对象 ndarray 广播功能函数 整合C/C++/Fortran代码的工具 线性代数.傅里叶变换.随机数生成等功 ...

  7. python中的numpy库有什么优缺点_python中关于numpy库的介绍

    1.Numpy是什么? NumPy(Numerical Python的缩写)是一个开源的Python科学计算库.使用NumPy,就可以很自然地使用数组和矩阵. NumPy包含很多实用的数学函数,涵盖线 ...

  8. python average函数怎么用_python 的numpy库中的mean()函数用法介绍

    1. mean() 函数定义: numpy.mean(a, axis=None, dtype=None, out=None, keepdims=)[source] Compute the arithm ...

  9. python学习笔记之numpy库的使用——超详细

    文章目录 NumPy介绍 一.如何创建 1.导入Numpy库,并命名为np: 2.查看版本 3.通过列表创建一维数组: 4.通过列表创建二维数组: 5.创建全为0的二维数组 6.创建全为1的三维数组 ...

最新文章

  1. kali2018.2安装配置OpenVAS-9及错误处置
  2. Softmax算法:逻辑回归的扩展
  3. 3COM小型办公室有线局域网方案
  4. 开多个bitset和bitset的基本使用
  5. tracepro应用实例详解_离心铸造工艺(实例)
  6. lwip连续发数据卡死_Mysteel:12月全球铁矿石发运量稳中微增 进口矿咋走?
  7. 支付宝:提现免费再延3年,不设上限!
  8. java最广泛的运行环境_Java运行环境下载|Java SE Runtime Environment(Java运行环境)8.0.131 官方多语言正式版_ - 极光下载站...
  9. Web定时器 - Timer
  10. unity3d_打飞碟
  11. Invalid injected android support version ‘202.7660.26.42.7322048‘, expected to be of the form ‘w.x.y
  12. Java程序编译及打包
  13. QT中的.pro文件,以及.pri .prj .prl文件说明
  14. 用计算机怎么算异分母加减法,怎么正确算异分母分数加减法
  15. 判断两个矩形是否相交
  16. IEEE 投稿参考文献格式bib
  17. 首席新媒体运营黎想教程:海报裂变活动怎么做?4个必备技巧
  18. STRAIGHT_JOIN
  19. 基于 DirectShow 实现 SourceFilter 常见问题分析
  20. vue+播放直播视频流(websocket的流文件)

热门文章

  1. Android studio 出现一直在同步Syncing only active variant
  2. Qt实现简易的浏览器
  3. 日常积累6:提取并拟合图片中的曲线
  4. 嵌入式应用开发在线图书网址
  5. 微信小程序 Page pages/Index/Index has not been registered yet.问题解决
  6. USB-IF BC1.2充电协议解读
  7. 【LeetCode - Java】14. 最长公共前缀 (简单)
  8. 【100%通过率】华为OD机试真题 C++ 实现【最接近最大输出功率的设备 /查找充电设备组合】
  9. 上buff——状态模式
  10. matlab图加上箭头和标注实例