Open CV系列学习笔记(二)Numpy数组操作
遍历图片中的像素点对其修改
首先获取图片的的宽(width)高(height)和通道数(channels),遍历每个像素点,对其修改。
import cv2 as cv
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 - pv
cv.imshow("pixels_demo",image)
print("--------Hellow Python-------")
src = cv.imread("E:/picture/10.bmp")#修改为自己的图片地址
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
t1 = cv.getTickCount()
access_pixels(src)
t2 = cv.getTickCount()
time = (t2 - t1)/cv.getTickFrequency();#计算运行时间
print("time : %s ms"%(time*1000))
cv.waitKey(0)
cv.destroyAllWindows()
t1 = cv.getTickCount()用来获取电脑cpu时钟,计算运行代码所用的时间。
运行效果:
--------Hellow Python-------
(331, 356, 3)
width : 356, height : 331, channels : 3
time : 424.8318 ms
可以看到,遍历一幅331*356,的彩图花费的时间为424.8318ms(我的电脑是i7)感觉还是太慢。
可以调用Opencv中自带的像素取反api,效果同上
import cv2 as cv
import numpy as np
def inverse(image):#同上函数 但更快
dst = cv.bitwise_not(image)
cv.imshow("inverse demo",dst)
print("--------Hellow Python-------")
src = cv.imread("E:/picture/01.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
t1 = cv.getTickCount()
inverse(src)
t2 = cv.getTickCount()
time = (t2 - t1)/cv.getTickFrequency();
print("time : %s ms"%(time*1000))
cv.waitKey(0)
运行结果:
--------Hellow Python-------
time : 15.8474 ms
对指定的数组赋值
import cv2 as cv
import numpy as np
def create_image():#对指定的数组赋值(BGR)
#创建多通道赋值
"""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)
#单通道,(图像初始化)
img = np.ones([400,400,1],np.uint8)
img = img*0
cv.imshow("new image",img)
cv.imwrite("./myImage.png",img)"""
m1 = np.ones([3,3],np.uint8)
m1.fill(122.388)
print(m1)
m2 = m1.reshape([1,9])
print(m2)
m3 = np.array([[2,4,3],[4,5,6],[7,8,9]],np.int32)
m3.fill(9)
print(m3)
print("--------Hellow Python-------")
src = cv.imread("E:/picture/01.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
t1 = cv.getTickCount()
create_image()
t2 = cv.getTickCount()
time = (t2 - t1)/cv.getTickFrequency();
print("time : %s ms"%(time*1000))
cv.waitKey(0)
cv.destroyAllWindows()
结果输出:
--------Hellow Python-------
[[122 122 122]
[122 122 122]
[122 122 122]]
[[122 122 122 122 122 122 122 122 122]]
[[9 9 9]
[9 9 9]
[9 9 9]]
time : 0.6471 ms