OpenCV_03 Numpy库和Mat

article/2025/9/28 4:55:34

前言

主要学习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)


http://chatgpt.dhexx.cn/article/fx362p1R.shtml

相关文章

【MATLAB Image Processing Toolbox 入门教程六】“导入、导出和转换”之“图像类型转换Ⅰ——在不同图像类型之间转换”

【MATLAB Image Processing Toolbox 入门教程六】 1 gray2ind函数2 ind2gray函数3 mat2gray函数4 rgb2gray函数5 rgb2ind函数6 label2rgb函数7 imsplit函数8 grayslice函数 MATLAB Image Processing Toolbox支持的图像类型有&#xff1a;二值图像、索引图像、灰度图像、彩色图像…

黑白图转RGB(Matlab)

SamplePath1 "C:\Users\LY\Desktop\green\"; %存储图像的路径 fileExt *.bmp; %待读取图像的后缀名 %获取所有路径 files dir(fullfile(SamplePath1,fileExt)); len size(files,1); for ii1:lenfileName strcat(SamplePath1,files(ii).name);Iimread(fileNa…

【mmdeploy】mmseg转ONNX/TensorRT,附推理代码

目录 1.关于mmdeploy 2.环境安装 2.1预编译安装&#xff08;Linux-x86_64, CUDA 11.x, TensorRT 8.2.3.0&#xff09;&#xff1a; 2.2预编译安装&#xff08;Linux-x86_64, CUDA 11.x, ONNX&#xff09;&#xff1a; 3.mmseg工程torch转onnx 4.使用onnx模型文件进行推理…

讨论Matlab中double,im2double,mat2gray函数区别

图像类和类型间的转换 im2uint8 将输入中所有小于0的设置为0,而将输入中所有大于1的设置为255 其他的所有乘以255 im2uint16 将输入中所有小于0的设置为0,而将输入中所有大于1的设置为65535 mat2gray 把一个double类的任意数组转换成值范围在[0,1]的归一化double类数组 im2…

Matlab中double,im2double,mat2gray函数使用方法介绍

图像类和类型间的转换 im2uint8 将输入中所有小于0的设置为0,而将输入中所有大于1的设置为255 其他的所有乘以255 im2uint16 将输入中所有小于0的设置为0,而将输入中所有大于1的设置为65535 mat2gray 把一个double类的任意数组转换成值范围在[0,1]的归一化double类数组 im2…

numpy转PIL.Image: 处理Mask图像为单通道的彩色/灰度图colormap.png

文章目录 从分割数据集说起8位彩色图8位灰度图1位二值图 什么是图像位深PNG图像格式简介如何处理Mask图像注意&#xff01;&#xff01;&#xff01;PIL一定要手动close 防止内存泄漏PIL库相关函数 从分割数据集说起 8位彩色图 下图是 NYU数据集 里的一张Mask图像, 显示彩图,…

matlab图像类型的转换九种

在对图像进行处理时&#xff0c;很多时候对图像的类型有特殊的要求&#xff0c;例如&#xff0c;在对索引图像进行滤波时&#xff0c;必须把它转换为RGB图像&#xff0c;否则光对图像的下标进行滤波&#xff0c;得到的是毫无意义的结果。在MATLAB中&#xff0c;提供了许多图像类…

matlab mat2gray函数 对图像数据归一化的理解以及互转

刚好今天也有需要用三维重建中的深度数据&#xff0c;数据值大于255&#xff0c;自己用matlab可以显示出来&#xff0c;如果直接保存成图片数据都是1&#xff0c;什么都看不到&#xff0c;拿给别人也没有用&#xff0c;于是就想到用mat2gray先将数据进行归一化到&#xff08;0,…

Matlab中mat2gray函数用法

目录 语法 描述 例子 将矩阵转换为图像 ​​​​​​​ mat2gray将矩阵转换为灰度图像 语法 I mat2gray(A,[amin amax]) I mat2gray(A)描述 I mat2gray(A,[amin amax]) 将矩阵转换为包含0&#xff08;黑色&#xff09;到1&#xff08;白色&#xff09;范围内的值A的灰度…

图像处理函数——mat2gray、imclose、imopen、imerode

文章目录 1.mat2gray2.imclose3.imopen4.imerode 1.mat2gray 功能&#xff1a; 将矩阵转换为灰度图像 用法&#xff1a;: l mat2gray(A, [amin amax])将矩阵A转换为灰度图像l。 [amin amax]为表示转换的阙值&#xff0c;A中大于amax的值将转换成1&#xff0c;小于amin的值将转…

mat2gray

文章目录 SyntaxDescriptionConvert a Matrix into an Image mat2gray&#xff1a;将矩阵转换为灰度图像 Syntax I mat2gray(A,[amin amax]) I mat2gray(A)Description I mat2gray&#xff08;A&#xff0c;[amin amax]&#xff09;将矩阵A转换为强度图像I&#xff0c;该强…

CAN网络dbc格式

dbc 格式 是vector公司定义的私有文件格式。因vector公司在汽车领域&#xff0c;用者甚众&#xff0c;dbc成为描述can matrix&#xff0c;can报文格式的一种重要形式。格式标准说明&#xff0c;见本人上传附件。 CAN协议领域&#xff0c;有很多CAN协议&#xff0c;通用的有J19…

CAN 网络通信矩阵

CAN 网络通信矩阵 通信矩阵DBC文件DBC软件 通信矩阵 将信号、消息和网络节点的相互关系以表格形式展现&#xff0c;由OEM定义。 车辆网络中各节点ECU必须遵循该通讯矩阵才能完成信息的交互和共享。 网络节点&#xff1a;一个汽车控制器作为一个网络节点消息&#xff1a;一个控…

整车CAN网络介绍---CAN--PT CAN--Chassis CAN--Body CAN--Info CAN

CAN(Controller Area Network)控制器局域网络&#xff0c;CAN网络在早期的整车应用中以BCM(车身控制 1.整车CAN网络介绍 CAN(Controller Area Network)控制器局域网络&#xff0c;CAN网络在早期的整车应用中以BCM(车身控制器)为控制中心&#xff0c;主要是车身零部件(雨刮/大灯…

【汽车总线技术】CAN FD与CAN网络共存的解决方案

1.CAN FD发展的背景介绍 随着总线技术在汽车电子领域越来越广泛和深入的应用&#xff0c;特别是自动驾驶技术的迅速发展&#xff0c;汽车电子对总线宽度和数据传输速率的要求也越来也高&#xff0c;传统CAN&#xff08;1MBit/s&#xff0c;8Bytes Payload&#xff09;已难以满…

整车CAN网络基本结构

在了解can网络之前, 先了解1个问题: 什么是智能硬件与ECU ? 何为智能硬件, 就是包含智能控制单元的硬件, 比如发动机, 发动机上有一块儿专门负责控制发动机进气量, 喷油量, 排气量的控制单元, 这块单元相当于发动机的大脑. 他具有信号发送, 信号接收, 参数存储等基本功能, 这…

CAN网络应用软件设计CANoeCANFD

CAN CAN网络应用 简单案例 典型汽车网络拓扑结构 动力CAN&#xff08;1&#xff09; 负责车辆动力和必须实时响应的安全相关ECU接入这条CAN 底盘动态CAN&#xff08;2&#xff09; 负责底盘动态控制和辅助相关的功能的ECU接入到这条CAN信息CAN&#xff08;3&#xff09; 负责仪…

AutoSar之CAN网络管理

本文首发于微信公众号“汽车控制与人工智能”欢迎关注。 今天整理下AUTOSAR中的CAN网络管理。 ​AUTOSAR中网络管理主要使用了CAN接口(CanIf),并提供通用网络管理接口(NmIf)。CAN网络管理在CAN架构中所处的位置如图1,与其他模块的交互如图2。 图1 CAN架构 图2 网络管理和…

can 网络管理

网络管理主要功能&#xff1a; 是用来管理ECU是否在网络里面&#xff0c;不在的话请求加入&#xff0c;也就是ALIVE报文&#xff0c;要判断是否掉线&#xff0c;以及睡眠状态的转换机制&#xff0c;以及跛行状态判&#xff0c;也即是RING报文。 主要的实现逻辑流程&#xff1…

CAN网络管理唤醒功能

采用1043的can 芯片:工作模式 – 正常模式 – 具有 INH 输出以及本地和远程唤醒请求功能的待机模式 – 具有 INH 输出以及本地和远程唤醒请求的低功耗睡眠模式 状态切换流程图: CAN唤醒的需求: 唤醒请求(Wake Up Request) 唤醒请求可分为两种: ● 主动唤醒请求:来自模…