生活随笔
收集整理的這篇文章主要介紹了
三、Numpy数组操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、對圖片各個像素點的像素值進行操作
image.shape[0]:image圖像的height
image.shape[1]:image圖像的width
image.shape[2]:image圖像的channels
import cv2
import numpy
as np
def access_pixels(image
):print(image
.shape
)height
= image
.shape
[0]width
= image
.shape
[1]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 - pvcv2
.imshow
("pixels ",image
)src
= cv2
.imread
("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")
cv2
.namedWindow
("input image",cv2
.WINDOW_AUTOSIZE
)
cv2
.imshow
("input image",src
)t1
= cv2
.getTickCount
()
access_pixels
(src
)
t2
= cv2
.getTickCount
()time
= (t2
-t1
)/cv2
.getTickFrequency
()
print("time:%s ms"%(time
*1000))
cv2
.waitKey
(0)cv2
.destroyAllWindows
()
運行結果為:
運行的時間為619ms時間有點長,這里也就是實現圖像像素值的反轉操作而已,這里可以調用bitwise_notAPI(這個函數是C++寫的),來縮短運行時間
cv2.bitwise_not(image):255 - image所對應的像素值
import cv2
import numpy
as np
def inverse(image
):dst
= cv2
.bitwise_not
(image
)cv2
.imshow
("inverse_image",dst
)src
= cv2
.imread
("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")
cv2
.namedWindow
("input image",cv2
.WINDOW_AUTOSIZE
)
cv2
.imshow
("input image",src
)
t1
= cv2
.getTickCount
()
inverse
(src
)
t2
= cv2
.getTickCount
()
time
= (t2
-t1
)/cv2
.getTickFrequency
()
print("time:%s ms"%(time
*1000))
cv2
.waitKey
(0)cv2
.destroyAllWindows
()
運行效果如下:
二、創建圖像
創建一個400×400的三顏色通道的圖像,圖像的B通道賦值為1,其他顏色通道賦值為0,即顯示藍色
np.zeros([400,400,3],np.uint8):創建一個400*400的3顏色通道的圖像,全部賦值為0,且每個像素值單位為uint8
import cv2
import numpy
as np
def create_image():img
= np
.zeros
([400,400,3],np
.uint8
)img
[:,:,0] = np
.ones
([400,400])*255cv2
.imshow
("new image",img
)src
= cv2
.imread
("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")
cv2
.namedWindow
("input image",cv2
.WINDOW_AUTOSIZE
)
cv2
.imshow
("input image",src
)
t1
= cv2
.getTickCount
()
create_image
()
t2
= cv2
.getTickCount
()
time
= (t2
-t1
)/cv2
.getTickFrequency
()
print("time:%s ms"%(time
*1000))
cv2
.waitKey
(0)cv2
.destroyAllWindows
()
效果圖如下:
三、對單通道圖像進行操作
方法一:先對400×400大小的單通道圖像全部初始化為0,然后再對400×400區域的像素1乘以127,最終轉換為127像素的灰色圖像。
np.zeros([400,400,3],np.uint8):創建一個400400的3顏色通道的圖像,全部賦值為0,且每個像素值單位為uint8
np.ones([400,400])*127:對400400的圖像的元素再次基礎上分別乘以127
import cv2
import numpy
as np
def create_image():img
= np
.zeros
([400,400,1],np
.uint8
)img
[:,:,0] = np
.ones
([400,400])*127cv2
.imshow
("new image",img
)src
= cv2
.imread
("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")
cv2
.namedWindow
("input image",cv2
.WINDOW_AUTOSIZE
)
cv2
.imshow
("input image",src
)
t1
= cv2
.getTickCount
()
create_image
()
t2
= cv2
.getTickCount
()
time
= (t2
-t1
)/cv2
.getTickFrequency
()
print("time:%s ms"%(time
*1000))
cv2
.waitKey
(0)cv2
.destroyAllWindows
()
運行效果如下:
方法二:直接對400×400像素大小的單通道圖像全部初始化為1,再對圖像乘以255,得到白色圖像。
img = np.ones([400,400,1],np.uint8):創建一個400*400的單通道的圖像,全部賦值為1,且每個像素值單位為uint8
img = img * 255:img圖像所有的像素值均對應乘以255
import cv2
import numpy
as np
def create_image():img
= np
.ones
([400,400,1],np
.uint8
)img
= img
* 255cv2
.imshow
("new image",img
)src
= cv2
.imread
("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")
cv2
.namedWindow
("input image",cv2
.WINDOW_AUTOSIZE
)
cv2
.imshow
("input image",src
)
t1
= cv2
.getTickCount
()
create_image
()
t2
= cv2
.getTickCount
()
time
= (t2
-t1
)/cv2
.getTickFrequency
()
print("time:%s ms"%(time
*1000))
cv2
.waitKey
(0)cv2
.destroyAllWindows
()
效果圖如下:
四、對矩陣操作
np.ones([3,3],np.uint8):創建一個3 * 3的矩陣,全部賦值為1,且每個像素值單位為uint8
m1.fill(52):m1圖像的所有像素點的像素值全部填充為52
m1.reshape([1,9]):將m1原本3 * 3的矩陣轉換為1* 9的矩陣
import cv2
import numpy
as np
def create_image():m1
= np
.ones
([3,3],np
.uint8
)m1
.fill
(52)print(m1
)m2
= m1
.reshape
([1,9])print(m2
)src
= cv2
.imread
("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")
cv2
.namedWindow
("input image",cv2
.WINDOW_AUTOSIZE
)
cv2
.imshow
("input image",src
)
t1
= cv2
.getTickCount
()
create_image
()
t2
= cv2
.getTickCount
()
time
= (t2
-t1
)/cv2
.getTickFrequency
()
print("time:%s ms"%(time
*1000))
cv2
.waitKey
(0)cv2
.destroyAllWindows
()
效果圖如下:
總結
以上是生活随笔為你收集整理的三、Numpy数组操作的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。