opencv学习手记(2)

opencv学习手记(2)

OpenCV基础


  • 读写图像文件
  • 图像与原始字节之间的转换
  • 使用numpy.array访问图像数据
  • 视频文件的读写(复制视频)
  • 捕获摄像头的帧,并保存视频文件
  • 窗口显示图像
  • 在窗口显示摄像头帧


1.读写图像文件

OpenCV的imread()和imwrite()函数能支持各种静态图像文件格式。

  • bmp格式:每个像素每个通道为8位;
  • png:每个像素每个通道为8位或者16位。

(1) 使用函数cv2.imread(filename[,flags]) 读入图像。

  • 第一个参数,这幅图像应该在此程序的工作路径,或者给函数提供完整路径;
  • 第二个参数是标志位,要告诉函数应该如何读取这幅图片,即指定加载图片的颜色类型,默认加载类型是cv2.IMREAD_COLOR:

(2)使用函数cv2.imwrite(filename,img[,params])

  • 第一个参数,这幅图像应该保存的工作路径,或者给函数提供完整路径;
  • 第二个参数是输入图像;
  • 第三个参数表示为特定保存格式的参数编码,在一般情况下不需要更改;

(3)使用cv2.cvtColor(src,code[,dst[,dstCn]])函数

  • 第一个参数输入图像即要进行颜色空间变换的原图像;
  • 第二个参数转换的代码或标识,即在此确定将什么制式的图片转换成什么制式的图片;
  • 第三个参数为为输出图像即进行颜色空间变换后存储图像;
  • 第四个参数是目标图像通道数,如果取0,则由src和code决定;

函数的作用是将一个图像从一个颜色空间转换到另一个颜色空间,但是从BGR向其他类型转换时,必须明确指出图像的颜色通道,在opencv中,其默认的颜色制式排列是BGR而非RGB。所以对于24位颜色图像来说,前8-bit是蓝色,中间8-bit是绿色,最后8-bit是红色。常见的B,G,R通道的取值范围为:

  • . 0-255 :cv2.CV_8U类型图片
  • . 0-65535: cv2.CV_16U类型图片
  • . 0-1::cv2.CV_32F类型图片

BGR–>GRAY的转换是我们常用的转换格式,其转换公式如下:

BGRA格式图片,BGRA是代表Blue(蓝色),Green(绿色)、Red(红色)、和Alpha的色彩空间。Alpha参数一般用作不透明度参数,如果一个像素的alpha通道数值为0%,说明它完全透明。


import cv2
import numpy as np
import os
#创建,3x3 全0矩阵
#                [[0 0 0]
                # [0 0 0]
                # [0 0 0]]
img = np.zeros((3,3),dtype=np.uint8) 
print(img.shape)    #(3, 3)
#利用cvtColor()函数将图像转换为blue-green-red(BGR)格式
img = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
#输出维度为3x3x3 表明图像大小为3x3 有三个通道  每个像素由一个三元数组表示(B,G,R) 
print(img)      # [[[0 0 0]
                #   [0 0 0]
                #   [0 0 0]]
                #    [[0 0 0]
                #    [0 0 0]
                #    [0 0 0]]
                #   [[0 0 0]
                #   [0 0 0]
                #   [0 0 0]]]
print(img.shape)    #(3, 3, 3)   
#把png图像转换为jpeg格式
root = '.\image'
file = os.path.join(root,'test.bmp')
#加载OpenCV图像最简单的方式是使用imread函数,该函数会返回一副图片,
#这幅图片是一个数组(根据imread()输入参数的不同,该图像可能是一个二维数组,也可能是三维数组)
#在默认情况下,即使文件是灰度格式,imread()函数也会返回BGR格式的图像
#BGR和RGB所表示的色彩空间相同,字节顺序相反
img = cv2.imread(file)      #读bmp格式取图片