Python3與OpenCV3.3 影象處理(三)--Numpy陣列操作
阿新 • • 發佈:2019-02-06
一、本節簡述
本節主要講解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()
覺得不錯打賞一下 | |
---|---|