OpenCV 是一个在影像与图像处理上非常实用且方便的一个工具,其庞大程度已经可以算是一个平台,支援了各式各样的编程语言,当然 Python 也是包含其中的“之一”,这个包集成了许多当下流行的图像处理算法,成为了他们呼叫函数的其中一个部分,不用我们用户单独的去设置函数细节,是个非常暖心的包。
使用了这个模块做图像处理一段时间了,总是只有看到最后的结果与呼叫的函数对应功能,渐渐的这些处理过程被埋在了 opencv 处理的背后,为了彻底亲身经历一遍图像处理的过程,我 ps 了一张高 4 pixels,宽 3 pixels 的图片(如下面图片旁边的那一“点”),由于原图太小了,在其“点”的左边放大显示像素的样貌:
当使用了 cv2.imread('path', 1) 把图片读入 opencv 里面之后,代码与结果如下:
>>> import cv2
>>> path = '/home/abc/Desktop/opencv_example.png'
>>> img = cv2.imread(path, 1)
>>> img
array([[[ 40, 180, 200],
[255, 255, 255],
[250, 180, 100]],
[[150, 50, 70],
[200, 120, 80],
[140, 40, 200]],
[[140, 200, 200],
[ 0, 0, 0],
[ 30, 200, 250]],
[[ 90, 160, 220],
[ 0, 40, 200],
[ 20, 220, 80]]], dtype=uint8)
>>> img.shape
(4, 3, 3)
>>> type(img)
<class 'numpy.ndarray'>
>>> img.size
36
>>> img.dtype
dtype('uint8')
缩小图片之后导入 opencv 里面的结果简直是一目了然了!原来在 array 里面的样子就是把图片翻了一个角度侧着看的,而从图里面对应到的颜色看来,也就可以知道 opencv 在排部图像颜色顺序上采用的是 BGR 的方法(跟 matplotlib 这个包在操控图片是偶的顺序 RGB 是不同的,需要被转换)