1. Numpy 相关知识

1.1 Ndarray 对象

在了解 OpenCV 的图像对象之前我们先对 NumPy 的基础知识做一回顾,方便我们后续更进一步理解图像对象的一系列操作。

In [2]: a = np.array([[1,  2],  [3,4], [5, 6]])In [3]: a
Out[3]:
array([[1, 2],[3, 4],[5, 6]])In [4]: a.shape
Out[4]: (3, 2)

这是一个 3 X 2 的矩阵。

In [5]: b = np.array([[[1,  2],  [3,4], [5, 6]]])In [6]: b
Out[6]:
array([[[1, 2],[3, 4],[5, 6]]])In [7]: b.shape
Out[7]: (1, 3, 2)

这是一个 1 X 3 X 2 的矩阵。

In [8]: c = np.array([[[1,  2],  [3,4], [5, 6]], [[11,  22],  [33,44], [55, 66]]])In [9]: c
Out[9]:
array([[[ 1,  2],[ 3,  4],[ 5,  6]],[[11, 22],[33, 44],[55, 66]]])In [10]: c.shape
Out[10]: (2, 3, 2)

这是一个 2 X 3 X 2 的矩阵。

1.2 数据类型

名称 描述
bool_ 布尔型数据类型(True 或者 False)
int_ 默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
intc 与 C 的 int 类型一样,一般是 int32 或 int 64
intp 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8 字节(-128 to 127)
int16 整数(-32768 to 32767)
int32 整数(-2147483648 to 2147483647)
int64 整数(-9223372036854775808 to 9223372036854775807)
uint8 无符号整数(0 to 255)
uint16 无符号整数(0 to 65535)
uint32 无符号整数(0 to 4294967295)
uint64 无符号整数(0 to 18446744073709551615)
float_ float64 类型的简写
float16 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位

numpy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符,包括 np.bool_,np.int32,np.float32,等等。
dtype 对象是使用以下语法构造的:

numpy.dtype(object, align, copy)
  • object - 要转换为的数据类型对象
  • align - 如果为 true,填充字段使其类似 C 的结构体。
  • copy - 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用
In [13]: dt = np.dtype(np.int32)In [14]: dt
Out[14]: dtype('int32')

2. 图像对象创建与赋值

import cv2
import numpy as npimage_name = "img/003.jpg"
img = cv2.imread(image_name)
print "img is {}".format(img)
print "img is {}".format(len(img))            # img is 198
print "img is {}".format(len(img[0]))     # img is 198
print "img is {}".format(len(img[0][0]))  # img is 3
x1 = np.copy(img)
print x1.shape      # (198, 198, 3)x2 = img
img[50:100, 100:150, :] = 255
cv2.imshow("x2", x2)
cv2.waitKey(0)
cv2.destroyAllWindows()

其中 img[50:100, 100:150, :] = 255 表示将 从图片最顶端 50 像素- 100 像素, 从图片最左边 100 像素- 150 像素的全部值设置成 255 也就是纯白色。

输出结果为:

img is [[[131 190 199][107 167 173][ 82 140 145]...[ 67 125  97][ 67 125  97][ 66 124  96]][[130 187 196][109 167 173][ 88 144 149]...[ 66 124  96][ 66 124  96][ 65 123  95]][[118 170 177][104 156 162][ 90 141 144]...[ 67 125 100][ 66 124  99][ 65 123  98]]...[[  6  73  36][  8  75  38][  9  73  38]...[ 44  58  30][ 45  59  31][ 46  60  32]][[  4  68  38][  7  71  41][ 10  71  43]...[ 41  55  27][ 42  56  28][ 44  58  30]][[  0  63  34][  5  69  40][  8  69  43]...[ 39  53  25][ 40  54  26][ 41  55  27]]]
img is 198
img is 198
img is 3
(198, 198, 3)

可以看到图片在内存中是以 NumPy 的多维矩阵形式保存的,它是一个 198 x 198 x 3 的多维矩阵,其中 198 x 198 表示像素, 3 表示通道数,也就是每个像素点由多少个元素组成。

原图和执行之后的效果图如下

x3 = np.zeros(img.shape, img.dtype)
cv2.imshow("x3", x3)
cv2.waitKey(0)
cv2.destroyAllWindows()

图片效果显示

x4 = np.zeros([200, 200], np.uint8)
cv2.imshow("x4", x4)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果显示:


x5 = np.ones(shape=[512, 512, 3], dtype=np.uint8)
x5[:, :, 0] = 255
cv2.imshow("x5", x5)
cv2.waitKey(0)
cv2.destroyAllWindows()

Python+OpenCV 图像处理系列(8)—— Numpy 对象及图像对象创建与赋值相关推荐

  1. Python+OpenCV 图像处理系列(2)—— 视频捕获、播放和保存

    1.视频捕获 为了获取视频,首先需要创建一个 VideoCapture 类对象.它的参数可以是设备的索引号,或者是一个视频文件.设备索引号就是在指定要使用的摄像头.一般的笔记本电脑都有内置摄像头.所以 ...

  2. Python+OpenCV 图像处理系列(9)—— 图像的翻转和缩放插值

    1. 图像的翻转 图像翻转 (Image Flip),图像翻转的本质像素映射,OpenCV 支持三种图像翻转方式: X轴翻转,flipcode = 0 Y轴翻转, flipcode = 1 XY轴翻转 ...

  3. Python+OpenCV 图像处理系列(5)—— 图像 ROI 操作及通道的拆分合并

    1. 图像 ROI 有时你需要对一幅图像的特定区域进行操作.例如我们要检测一副图像中眼睛的位置,我们首先应该在图像中找到脸,再在脸的区域中找眼睛,而不是直接在一幅图像中搜索.这样会提高程序的准确性和性 ...

  4. Python+OpenCV 图像处理系列(4)—— 图像像素的读写、算术运算、逻辑运算及像素的统计

    1. 像素的读写 可以根据像素的行和列的坐标获取它的像素值.对 BGR 图像而言,返回值为 B,G,R 的值. img.shape 可以获取图像的形状.它的返回值是一个包含行数 h,列数 w,通道数 ...

  5. Python+OpenCV 图像处理系列(1)— Ubuntu OpenCV安装、图片加载、显示和保存

    Ubuntu 16.04 下安装 Opencv sudo apt-get install libopencv-dev sudo apt-get install python-opencv 或者使用 p ...

  6. Python+OpenCV 图像处理系列(3)—— 画线、矩形、画圆、画椭圆、画多边形

    OpenCV 中的绘图函数 使用 OpenCV 绘制不同几何图形,其中包括的函数有 cv2.line() cv2.circle() cv2.rectangle() cv2.ellipse() cv2. ...

  7. Python+OpenCV 图像处理系列(7)—— 图像色彩空间及转换

    1. 色彩空间转换函数 cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 第一个参数为加载在内存的读片,第二个参数为转换的类型,其中包括: COLOR_BGR2GRAY = ...

  8. [Python图像处理] 三十五.OpenCV图像处理入门、算数逻辑运算与图像融合(推荐)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  9. Python+OpenCV图像处理(一篇全)

    参考:1.网易云课堂 Python+OpenCV图像处理 - 网易云课堂 2.[在水一方xym的博客]业精于勤荒于嬉,行成于思毁于随 - CSDN博客 https://blog.csdn.net/za ...

最新文章

  1. 第三天:Vue的组件化
  2. serverlet filter
  3. 有关ArcGIS Server Server URL问题
  4. 极简教程: 使用 matplotlib 绘制 GIF 动图
  5. idea 执行 java jar_idea打包java可执行jar包的实现步骤
  6. mysql验证身份证号正确_通过SQL校验身份证号码是否正确
  7. idea复制maven项目,source root为原项目的解决方法
  8. python画画用哪库好_学Python画画:应用Turtle库画一个蠢萌的小黄人
  9. php+mysql+zend+一键_PHP+MySQL+phpMyAdmin+ZendOptimizer环境一键安装包下载及安装手
  10. zk框架实现zul的js代码调用服务器java命令
  11. docx文档文字怎么加边框,WORD文档给文字加的边框,如何调大小
  12. JavaScript正则表达式学习笔记(一)
  13. 认识多种处理芯片的特性和实战(上篇)
  14. 公司企业如何设计微信小程序?
  15. 操作系统---存储管理
  16. Unity 触摸事件的运用
  17. 联发科服务器芯片,基于MTK7623N芯片的香蕉派 BPI-R2 ,智能通信物联网网关开发平台...
  18. C++ 简单的打折运算
  19. Numpy基础练习100题[前50题]
  20. 相机标定的理解及采用opencv和matlab工具箱的标定方法

热门文章

  1. docker镜像的备份和恢复
  2. 2022-2028年中国抗盐粘土行业发展现状调查及前景战略分析报告
  3. 送给2020年高考的考生
  4. 机器学习PAL数据可视化
  5. PyTorch迁移学习
  6. 用NVIDIA NsightcComputeRoofline分析加速高性能HPC的应用
  7. 5G和AI机器人平台为工业4.0和无人机提供服务
  8. Linux架构思维导图
  9. 如何部署自动驾驶系统
  10. 2021年大数据Flink(三十七):​​​​​​​Table与SQL ​​​​​​案例四