python opencv 官方文档

cv2读取图片之后将会产生numpy数据,图像读入的shape为:cv2 - 图1(和我们所想的cv2 - 图2不同!)

注意事项

  • cv2读取图片的路径中,不要包括中文,否则会造成无法读入的问题,并且该问题不会报错;

    图像加载、显示与保存

    图像加载

    完全英文路径

    直接利用cv2.imread(path)即可

  • 读取之后产生数据为numpy;(numpy的属性见numpy库)

  • 读取之后的shape为:cv2 - 图3
  • 通道分别为:B,G,R(不是RGB);

    1. import cv2
    2. path = 'C:/pictures/0.jpg'
    3. numpy_img = cv2.imread(path)

    路径中包括中文

    那么此时就不能够利用cv2.imread(path)了,这是因为ython 3.x 将系统字符编码默认为了Unicode,而opencv 读取图片函数的输入参数默认用gbk格式处理,两者存在差异。
    此时可以利用cv2.imdecode(np.fromfile(filePath,dtype=np.uint8),-1)进行替代。

    1. import os
    2. import cv2
    3. path = 'C:\江上渔翁\0.jpg'
    4. if os.path.exists(path):
    5. npimg = cv2.imdecode(np.fromfile(path,dtype=np.uint8),-1)
    6. print(npimg.shape)

    图像显示

    图像显示可以利用cv2.imshow(name, image),其中:

  • name:窗口显示时的名称;

  • image:图片numpy;

    1. import cv2
    2. path = 'C:/pictures/0.jpg'
    3. numpy_img = cv2.imread(path)
    4. cv2.imshow('test', numpy_img)
    5. cv2.waitKey(0)
    6. cv2.destroyAllWindows() // 关闭窗口

    注:

  • cv2.waitKey(time_ms)表示等待按键操作

    • time_ms表示的是等待时间,等待结束之后才会接着执行后面的语句;
    • 如果time_ms为0,则表示无限等待;
    • 如果配合cv2.imshow(xxx),则表示展示图片多少时间;
    • 其返回值为按键的编码,-1表示满意按键;

      图片保存

      可以利用cv2.imwrite(name, image)进行图片文件的保存;
  • name即是保存的文件名,为路径;

  • image为numpy格式的图片数据;
    1. import cv2
    2. path = 'C:/pictures/0.jpg'
    3. numpy_img = cv2.imread(path)
    4. cv2.imwrite('test.jpg', numpy_img)

    图片数据处理

    直接参考numpy的操作即可!

    其他操作(杂)

    三通道分离及合并

    三通道分离

    分离三个通道,获取个通道的信息,可以利用cv2.split(image)函数。
    1. import cv2
    2. path = 'C:/pictures/0.jpg'
    3. numpy_img = cv2.imread(path)
    4. b,g,r = cv2.split(numpy_img)

    合并

    合并可以采用cv2.merge()函数: ```python import cv2 path = ‘C:/pictures/0.jpg’ numpy_img = cv2.imread(path) b,g,r = cv2.split(numpy_img)

合并

merged = cv2.merge(b,g,r)

  1. <a name="iLDPo"></a>
  2. ### 绘图
  3. <a name="FBwse"></a>
  4. #### 绘文字
  5. ```python
  6. cv2.putText(img, 'string', (px,py), font, font_size, color, thickness, line_type)