1. 程式人生 > >Python3與OpenCV3.3 影象處理(三)--Numpy陣列操作

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()
覺得不錯打賞一下