Numpy

NumPy是使用Python进行科学计算的基本软件包。它包含以下内容:

  • 强大的N维数组对象

  • 复杂的(广播)功能

  • 集成C / C ++和Fortran代码的工具

  • 有用的线性代数,傅立叶变换和随机数功能

除了其明显的科学用途外,NumPy还可以用作通用数据的高效多维容器。可以定义任意数据类型。这使NumPy能够无缝,快速地与各种数据库集成。

NumPy是Python中科学计算的基本软件包。它是一个Python库,提供多维数组对象,各种派生对象(例如蒙版数组和矩阵)以及各种例程,用于对数组进行快速操作,包括数学,逻辑,形状处理,排序,选择,I / O ,离散傅立叶变换,基本线性代数,基本统计运算,随机模拟等等。

NumPy包的核心是ndarray对象。这封装了均匀数据类型的n维数组,为了提高性能,许多操作都在编译后的代码中执行。NumPy数组和标准Python序列之间有几个重要区别:

  • NumPy数组在创建时具有固定的大小,这与Python列表(可以动态增长)不同。更改ndarray的大小将创建一个新数组并删除原始数组。

  • NumPy数组中的所有元素都必须具有相同的数据类型,因此在内存中的大小将相同。例外:一个对象可以具有(Python,包括NumPy)对象的数组,从而允许数组具有不同大小的元素。

  • NumPy数组有助于对大量数据进行高级数学运算和其他类型的运算。通常,与使用Python的内置序列相比,此类操作可以更高效地执行,并且代码更少。

  • 越来越多的基于Python的科学和数学软件包都使用NumPy数组。尽管这些通常支持Python序列输入,但它们会在处理之前将此类输入转换为NumPy数组,并且通常会输出NumPy数组。换句话说,为了有效地使用很多(也许甚至是大多数)当今基于科学/数学的Python的软件,仅仅知道如何使用Python的内置序列类型是不够的-人们还需要知道如何使用NumPy数组。

 Numpy创建图形以及open_cv知识点补充

 

import numpy as np
import cv2 as cv


def access_pixels(image):
    print(image.shape)  #获取图片的详细信息(height,width,channels)
    height = image.shape[0] #索引为0表示height
    width = image.shape[1]  #索引为1表示width
    channels = image.shape[2]  #索引为2表示channels
    print("height : %s , width : %s , channels : %s" %(height,width,channels))
    for h in range(height): #获取height 像素
        for w in range(width):
            for c in range(channels):
                pv = image[h,w,c]  #获取图像的二维数组
                image[h,w,c] = 255-pv  #修改图像的二维数组
    cv.imshow("edit_image",image) #显示修改后的图像


def create_image():
    """
    img = np.zeros([400,400,3] , np.uint8 )  #设置图片的格式 height,width, channels
    img[:,:,0] = np.ones([400,400],) * 255
    img[:, :,1] = np.ones([400, 400], ) * 255
    img[:, :,2] = np.ones([400, 400], ) * 255
    cv.imshow("create_image",img)
    """
    #单通道 灰度图像
    # img = np.zeros([400,400,1],np.uint8)
    img= np.ones([400,400,1],np.uint8) * 127
    cv.imshow("dtd_img",img)
def inverse(img):
dst = cv.bitwise_not(img) #照片反选相比access_pixels速度快
cv.imshow("kui",dst)
src = cv.imread("./01.jpg") #rgb cv.imshow("numpy_date",src) t1 = cv.getTickCount() # access_pixels(src) create_image() t2 = cv.getTickCount() time = (t2-t1)/cv.getTickFrequency() print("Time : %s ms" %(time*1000)) cv.waitKey(0) cv.destroyAllWindows()
调用access_pixels() 

                                      

def inverse(img):
dst = cv.bitwise_not(img) #照片反选相比access_pixels速度快
cv.imshow("kui",dst)
原文地址:https://www.cnblogs.com/wqzn/p/12356933.html