各位亲爱的读者,博主:
大家好,我是涵子。今天我们继续讲讲opencv,讲讲其中numpy的秘密。如果不清楚上一章的内容,请从链接或者主页回去先读一遍之前的文章,否则今天的内容很难理解。
【涵子来信&python大全】——第二季——opencv第一篇_渴望学习和编程的涵子的博客-CSDN博客https://blog.csdn.net/B20111003/article/details/128643200?spm=1001.2014.3001.5502
还有,如果pip有问题的话,请复制下面两段代码在cmd命令窗口输入!
pip install opencv-python
pip install numpy
🍹欢迎各路大佬来到涵子主页指点☀️欢迎大家前来学习OpenCV。
✨博客主页:渴望学习和编程的涵子 🌹꧔ꦿ
🌹꧔ꦿ博文内容如对您有所帮助,还请给个点赞 + 关注 + 收藏✨
注意:今天的部分内容来自菜鸟编程,如果需要看原网址,请到参考内容进行网页跳转
目录
一、ndarray
1.1.什么是ndarray?
NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型元素的多维数组。
ndarray 中的每个元素在内存中都有相同存储大小的区域。
ndarray 内部由以下内容组成:
-
一个指向数据(内存或内存映射文件中的一块数据)的指针。
-
数据类型或 dtype,描述在数组中的固定大小值的格子。
-
一个表示数组形状(shape)的元组,表示各维度大小的元组。
-
一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
ndarray 的内部结构:
跨度可以是负数,这样会使数组在内存中后向移动,切片中 obj[::-1] 或 obj[:,::-1] 就是如此。
1.2.创建与使用ndarray
创建一个 ndarray 只需调用 NumPy 的 array 函数即可:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
或者来一个更加明确的例子:
import numpy as np
a = np.array([1,2,3])
print(a)
输出结果如下:
[1 2 3]
还有一个多维度的例子(类似于列表中的二维列表和三位列表等等)
# 多于一个维度
import numpy as np
a = np.array([[1, 2], [3, 4]])
print (a)
输出结果如下:
[[1 2]
[3 4]]
还有一个最小维度的例子
# 最小维度
import numpy as np
a = np.array([1, 2, 3, 4, 5], ndmin = 2)
print (a)
输出如下:
[[1 2 3 4 5]]
1.3.opencv的存储格式
还记得之前的程序吗?
import cv2
img = cv2.imread(r'C:\Users\Designer\Desktop\Bruce\pic.jpg')
cv2.imshow('demo', img)
cv2.waitKey(0)
只需在imshow后面加入一个print(img)就可以了
import cv2
img = cv2.imread(r'C:\Users\Designer\Desktop\Bruce\pic.jpg')
cv2.imshow('demo', img)
print(img)
cv2.waitKey(0)
看看结果:
[[[255 255 255]
[255 255 255]
[255 255 255]
...
[255 255 255]
[255 255 255]
[255 255 255]]
[[255 255 255]
[255 255 255]
[255 255 255]
...
[255 255 255]
[255 255 255]
[255 255 255]]
[[255 255 255]
[255 255 255]
[255 255 255]
...
[255 255 255]
[255 255 255]
[255 255 255]]
...
[[255 255 255]
[255 255 255]
[255 255 255]
...
[255 255 255]
[255 255 255]
[255 255 255]]
[[255 255 255]
[255 255 255]
[255 255 255]
...
[255 255 255]
[255 255 255]
[255 255 255]]
[[255 255 255]
[255 255 255]
[255 255 255]
...
[255 255 255]
[255 255 255]
[255 255 255]]]
因为其中的内容太多,就用...代替了(程序中输出时也是这样的)
二、颜色通道
2.1.色彩空间
色彩空间是人类为了描述不同频率的光,而建立出的色彩模型。不同通道的表示方式有所不同。
除了OpenCV默认的BGR色彩空间,还有两个常用的色彩空间:HSV色彩空间和GRAY色彩空间。
其中HSV色彩空间和BGR色彩空间都可以表示彩色色彩空间,都是使用三维数组表示的。而GRAY色彩空间在只能表示灰度图像。
2.2. BGR色彩空间
BGR色彩空间是OpenCV默认的色彩空间。众所周知,BGR色彩空间有三个通道。该色彩空间是基于B(l蓝色),G(绿色),R(红色)而言的。像素数组内每个数据的值都在[0,255]内。
2.3 GRAY色彩空间
GRAY色彩空间即灰度图像的色彩空间。像素数组中,可以是从0到255的 256个数字,每个数值表示从黑变白的颜色深浅程度。0表示纯黑色,255表示纯白色,数值越大越趋于白色。
2.4 HSV色彩空间
BGR色彩空间是基于三基色(红,绿,蓝) 而言的。而HSV色彩空间是基于色调(H),饱和度(S)和亮度(V) 而言的。
三、答疑解惑与参考资料
3.1.参考资料
NumPy Ndarray 对象 | 菜鸟教程 (runoob.com)https://www.runoob.com/numpy/numpy-ndarray-object.htmlOpenCV之 BGR、GRAY、HSV色彩空间&色彩通道专题 【Open_CV系列(三)】_侯小啾的博客-CSDN博客_bgr hsvhttps://blog.csdn.net/weixin_48964486/article/details/123758373
3.2.答疑解惑
3.2.1.请问为什么我在自己写完程序后报错了?
如果你的错误是这个:
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
numpy.array([1,2,3])
NameError: name 'numpy' is not defined
那就是你在import的时候用了as np,但是你在调用的时候却写了numpy,所以会报错
3.2.2.为什么我的程序报错了,不能运行?
可能是因为你的文件名和库名重合了,所以才会报错。详情请见下面文章:
python笔记:代码规范 和 我的三月总结_渴望学习和编程的涵子的博客-CSDN博客https://blog.csdn.net/B20111003/article/details/125329242?spm=1001.2014.3001.5502恭喜大家走出了学习opencv的第二步!希望大家持之以恒,送大家一句名言:
Stay foolish, stay kind.
好的,今天的内容就到这儿了!我们下一期再见!
涵子
2023/1/13