Python3与OpenCV3.3 图像处理(三)--Numpy数组操作

一、本节简述

本节主要讲解Numpy数组操作的一些基础知识。


二、什么是Numpy

 

       一个用python实现的科学计算包。包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。

NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran等所做的任务。

 

 

 


三、示例代码

 

import cv2 as cv
import  numpy as np


def access_pixel(image):
    """访问图像所有的像素"""
    print(image.shape)

    #获取图像的高度,图像的高度为shape的第一个值(维度)
    height=image.shape[0]
    #获取图像的宽读,图像的宽度为shape的第二个值(维度)
    width=image.shape[1]
    #获取图像通道数目,图像的通道数目为shape的第三个值(维度)
    #加载进来的图像都有三个通道,三个通道是图像的RGB
    channels=image.shape[2]
    print("width: %s,height: %s channels: %s"%(width,height,channels))

    #循环获取每个像素点,并且修改,然后存储修改后的像素点
    for row in range(height):
        for col in range(width):
            for c in range(channels):
                pv=image[row,col,c]
                image[row,col,c]=255-pv

    #输出的是一个呈现负片效果的图片
    cv.imshow("pixels_demo",image)


def create_image():
    """创建新图象"""
    #创建一张宽高都是400像素的3通道 8位图片
    img=np.zeros([400,400,3],np.uint8)
    #修改通道值
    img[:,:,0]=np.ones([400,400])*255
    img[:, :, 2] = np.ones([400, 400]) * 255
    cv.imshow("new image",img)

    #创建一个单通道的8位图片
    img=np.zeros([400,400,1],np.uint8)
    img=img*127
    cv.imshow("new image", img)
    cv.imwrite("127img.png",img)

    #numpy 数组维度的变换
    #定义一个二维数组
    img=np.ones([3,3],np.uint8)
    #填充每个元素
    img.fill(1000.22)
    print(img)
    #变换为一维数组
    img=img.reshape([1,9])
    print(img)

#读入图片文件
src=cv.imread('textImg.jpg')

#获取cpu当前时钟总数
t1=cv.getTickCount()
access_pixel(src)
t2=cv.getTickCount()
#计算处理像素花费的时间
#cv.getTickFrequency() 每秒的时钟总数
time=((t2-t1)/cv.getTickFrequency())
print("time: %s s"%time)
create_image()
#等待用户操作
cv.waitKey(0)
#释放所有窗口
cv.destroyAllWindows()

 

觉得不错打赏一下

 

 

 

posted @ 2017-11-15 23:26  上帝啊!我的如来!  阅读(230)  评论(0编辑  收藏  举报