python-OpenCV之numpy数组操作

1.图片的表示与存储
图片以矩阵的形式存在电脑里,需要用到数组操作来完成对图像的处理。

np.ones(size) #可以创建任意维度的数组,各个元素值均为1
2 
3 np.zeros(size,dtype) #同上,但各个元素值为0.默认元素类型为浮点数

使用示例:

img = np.zeros([256, 256, 3], np.uint8)
    #创建长宽为256的图片,三通道(BGR),像素大小为8位无符号整数
    img[: , : , 0] = np.ones([256,256])*255
    #设置图片的颜色B通道为255,也就是蓝色
    cv.imshow("new image", img)

    #单通道的灰度图像
    img1 = np.ones([400, 400, 1], np.uint8)
    img1 = img1 * 147
    cv.imshow("new image", img1)

示例:

m1 = np.ones([30, 30], np.uint8) #创建单通道的灰度图形
m1.fill(12)
print(m1)
cv.imshow("m1", m1)
#reshape注意size大小匹配 30*30=10*90
m2 = m1.reshape([10,90])
print(m2)
cv.imshow("m2", m2)

2.对像素pixel的操作
主要有两种形式:遍历和API的方式。

def access_pixels(image):
 2     print(image.shape)
 3     height = image.shape[0]
 4     width = image.shape[1]
 5     channels = image.shape[2]
 6     print("width : %s, height : %s, channels : %s" %(width, height, channels))
 7     for i in range(height):
 8         for j in range(width):
 9             for k in range(channels):
10                 pv = 255 - image[i, j, k]
11                 image[i, j, k] = pv
12     cv.imshow("pixels_demo", image)
13 
14 
15 def inverse(image):
16     #和上一个函数的for循环功能类似
17     dst = cv.bitwise_not(image)
18     cv.imshow("inverse demo", dst)

这时,你会发现使用API比循环遍历快不少。
3.计算函数运行时间

t1 = cv.getTickCount()
2 access_pixels(src) #需要测试时间的函数
3 t2 = cv.getTickCount()
4 time = (t2-t1)/cv.getTickFrequency()
5 print("time : %s ms" %(time*1000))
发布了27 篇原创文章 · 获赞 5 · 访问量 3297

猜你喜欢

转载自blog.csdn.net/welcome_yu/article/details/105306462
今日推荐