人脸检测-Numpy数组操作(2)

Numpy包介绍

1. 概述
Numpy是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
2. 主要功能
强大的N维数组对象 ndarray
广播功能函数
整合 C/C++/Fortran 代码的工具
线性代数、傅里叶变换、随机数生成等功能
3. 为什么要用Numpy
Python中提供了list容器,可以当作数组使用。但列表中的元素可以是任何对象,因此列表中保存的是对象的指针,这样一来,为了保存一个简单的列表[1,2,3]。就需要三个指针和三个整数对象。对于数值运算来说,这种结构显然不够高效。Python虽然也提供了array模块,但其只支持一维数组,不支持多维数组(在TensorFlow里面偏向于矩阵理解),也没有各种运算函数。因而不适合数值运算。 Numpy的出现弥补了这些不足。

Numpy对图片进行处理(遍历)

  • 改变像素值
height = image.shape[0] #图片的高度
 width = image.shape[1]  #图片的宽度
 channels = image.shape[2] #图片的通道数
 print("height: %s, width: %s,channels %s"%(height,width,channels))
    for row in range(height):
        for col in range(width):
            for c in range(channels):
                pv = image[row, col, c]
cv.bitwise_not(src); #与上述代码作用相同,都是取反

第一段代码为解释执行,而第二段代码为调用opencv的API执行时为C语言,效率非常高,消耗时间更短。

  • 创建图像
import numpy as np
img = np.zeros([height, width, channel], datatype, )
img = np.ones()#使用方法同上

但是这里的channel要加以注意:假如我们要3通道的图像,则令channel = 3,接着通过
img[ :, :, 0]、img[ :, : , 1]、img[ :, :, 2]这三个序号调用不同通道的像素点。

  • 运行速度记录
t1 = cv.getTickCount();
call_function();
t2 = cv.getTickCount();
time = (t2 - t1)/cv.getTickFrequency();
print("time : %s ms" %s(time*1000) )
  • allow overfloating
cv.conertScaleAbs(src, dst, alpha, beta )
  • 数组的变形
np.reshpe()
发布了42 篇原创文章 · 获赞 6 · 访问量 1521

猜你喜欢

转载自blog.csdn.net/qq_41156733/article/details/95222415