OpenCV计算机视觉[python版](一)

1 基本I/O脚本

1.1 读/写图像

OpenCV的imread函数()和imwrite函数()能支持各种静态图像文件格式。无论哪种格式,每一个像素都会有一个值,但不同格式表示像素的方式有所不同。例如,可以通过二维Numpy数组来简单创建一个黑色的正方形图像:

import cv2
import numpy as np

img = np.zeros((3,3))
print(img)
cv2.imwrite('blackblock.jpg', img)

img打印结果:
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]

保存的结果如下(3*3的黑色方块):

每个像素都由一个8位的整数表示,即每一个像素值的范围是0~255。

在默认情况下,即使图像文件为灰度图片格式,imread()函数也会返回BGR格式的图像。BGR与red-green-blue(RGB)所表示的色彩空间相同,但是字节顺序相反。

例如,重新加载blackblock.jpg图片,打印其结果:

1 import cv2
2 import numpy as np
3 
4 img = cv2.imread("blackblock.jpg")
5 print("img.shape ", img.shape)

img.shape = (3,3,3)

1.2 图像与原始字节之间的转换

从概念上讲,一个字节能表示0到255的整数。一个像素通常由每一个通道的一个字节表示。

一个OpenCV图像是.array类型的二维或三维数组。其中,image[0,0]或image[0,0,0],数组的第一个值代表了像素的y坐标或行,0表示顶部;第二个值表示像素的x坐标或列,0表示最左边;第三个值(如果有的话)表示颜色通道。

例如,对于一个左上角有白色像素的8位灰度图像而言,image[0,0]=255。对于一个左上角有蓝色像素的24位BGR图像而言,image[0,0]=[255,0,0]。

用随机数生成BGR图像:

1 import cv2
2 import numpy as np
3 
4 random_value = np.random.randint(0,high=255,size=1200)
5 random_array = random_value.reshape(20,20,3)
6 cv2.imwrite('randImage.jpg',random_array)

生成的randImage.jpg图像如下:

1.3 使用numpy.array访问图像数据

想要获取一个指定位置的像素值:通过numpy.array提供的item()方法非常方便,该函数有三个参数:x(或左)位置,y(或顶部)位置以及通道索引。该函数返回了指定位置(x,y,z(通道))处的像素大小。

修改指定位置的像素:可以通过itemset(),该函数有两个参数:(x,y,通道索引)和要设定的值。

例如,对上生成的randImage.jpg进行操作:

1 import cv2
2 import numpy as np
3 
4 
5 img = cv2.imread("dog.jpg")
6 print(img.item(0, 0, 1))  # 打印结果为:102
7 img.itemset((0,0,1),255)
8 print(img.item(0, 0, 1))  # 打印结果为:255


参考文献:[1]Joe Minichino, Joseph Howse(著); 刘波, 苗贝贝(译). OpenCV 3计算机视觉:Python语言实现[M]. 北京:机械工业出版社,2016.6

猜你喜欢

转载自www.cnblogs.com/love0912/p/9637548.html