cv2基本图像操作函数

目录

  • 基本函数
    • cv2.imread(filepath,flags)
    • cv2.imshow(wname,img)
    • cv2.waitKey(delay)
    • cv2.imwrite(file,img,num)
    • cv2.destroyAllWindows()
    • cv2.destroyWindow(wname)
    • cv2.VideoCapture(0)
    • cv2.cvtColor(img,flag)
    • cv2.flip(img,flipcode)
    • cv2.VideoWriter_fource()
    • cv.2VideoWriter(filename, fourcc, fps, frameSize[, isColor])
  • 视频读取辅助操作函数
    • cap.isOpened()
    • cap.read()
    • cap.release()
  • 画图操作
    • cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → img
    • cv2.circle(img, center_coordinates, radius, color, thickness)
    • cv2.rectangle(img, start_point, end_point, color, thickness)
    • cv2.ellipse(img, centerCoordinates, axesLength, angle, startAngle, endAngle, color [, thickness[, lineType[, shift]]])
    • cv2.polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)
    • cv2.putText(img, text, org, font, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])
    • cv2.setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata=0)
  • numpy相关辅助函数
    • np.zeros(shape,dtype=float,order='C')
    • numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
    • array.reshape()

基本函数

cv2.imread(filepath,flags)

  • filepath:图片的完整路径,如果图片在程序同一目录下,可以使用图片名和格式,如:image.png
  • flags:图片读取的形式,可以不写
    - cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1
    - cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0
    - cv2.IMREAD_UNCHANGED:包括alpha,可以直接写-1

cv2.imshow(wname,img)

  • wname:显示图片的窗口的名字
  • img:要显示的图片,这里的img是指cv2.imread()读取的图片如:
img = cv2.imread('test.png',0)
cv2.imshow('image',img)

cv2.waitKey(delay)

长在cv2.imshow()过后用来设置关闭图片的条件

  • delay:delay 的单位为ms毫秒
    - 当delay > 0,程序在给定的 delay 时间内等待用户按键触发,返回按下键的ASCII码值,如果用户没有按下键,则返回-1。
    - 当delay <= 0,则表示延时无限长,必须有按键按下才继续执行,返回按下键的ASCII码值
    - 没有,同delay <= 0
//判断键盘输入是否为字母q
if cv2.waitKey(1) & 0xFF == ord('q'):

&0xFF是为了将得到的ASCII码值做截取,只保留8位,原因是有些系统的cv2.waitKey()返回值不止8位

cv2.imwrite(file,img,num)

  • file为保存的文件名,是一个字符串
  • img是要保存的图像
  • num为可选参数
    - 对于jpeg,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别。默认为3.
    1. cv2.IMWRITE_JPEG_QUALITY类型为 long ,必须转换成 int
    2. cv2.IMWRITE_PNG_COMPRESSION, 从0到9 压缩级别越高图像越小
cv2.imwrite('1.png',img, [int( cv2.IMWRITE_JPEG_QUALITY), 95])
cv2.imwrite('1.png',img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])

cv2.destroyAllWindows()

销毁所有窗口

cv2.destroyWindow(wname)

销毁指定名称的窗口
wname:要销毁的窗口名

cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == 27:         # wait for ESC key to exit
   cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
   cv2.imwrite('test2.jpg',img)
   cv2.destroyWindow('image')

cv2.VideoCapture(0)

  • 参数为0表示默认为笔记本内置的第一个摄像头,如果需要读取已有的视频则参数改为视频所在路径路径,例如:
cap=cv2.VideoCapture(‘video.mp4’)

cv2.cvtColor(img,flag)

  • img:需要转化的图片
  • flag:转换类型
  • 返回值为转换后的图片
  • flag格式
cv2.COLOR_X2Y,其中X,Y = RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS

例子:

#彩色图片转换为灰度图片
img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
#灰度图片转换为彩色图片
img3 = cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)

可使用如下命令得到可使用的flag(没试过)

import cv2
import numpy as np

flags = [i for i in dir(cv2) if i.startswith('COLOR_')]

print(flags)

cv2.flip(img,flipcode)

  • img:需要操作的图片
  • flipcode:翻转方式
flipcode 翻转方式
1 水平翻转
0 垂直翻转
-1 水平垂直翻转

cv2.VideoWriter_fource()

  • 编码器
  • 返回一个编码器
    参数列表
cv2.VideoWriter_fourcc(‘M’, ‘P’, ‘4’, ‘V’) MPEG-4编码 .mp4 可指定结果视频的大小
cv2.VideoWriter_fourcc(‘X’,‘2’,‘6’,‘4’) MPEG-4编码 .mp4 可指定结果视频的大小
cv2.VideoWriter_fourcc(‘I’, ‘4’, ‘2’, ‘0’) 该参数是YUV编码类型,文件名后缀为.avi 广泛兼容,但会产生大文件
cv2.VideoWriter_fourcc(‘P’, ‘I’, ‘M’, ‘I’) 该参数是MPEG-1编码类型,文件名后缀为.avi,随机访问,灵活的帧率、可变的图像尺寸、定义了I帧、P帧和B帧、运动补偿可跨越多个帧、半像素精度的运动向量、量化矩阵、GOF结构、slice结构、技术细节、输入视频格式
cv2.VideoWriter_fourcc(‘X’, ‘V’, ‘I’, ‘D’) 该参数是MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小
cv2.VideoWriter_fourcc(‘T’, ‘H’, ‘E’, ‘O’) 该参数是Ogg Vorbis,文件名后缀为.ogv,音频压缩格式,有损压缩,类似于MP3等的音乐格式。兼容性差,文件扩展名为.ogv。
cv2.VideoWriter_fourcc(‘F’, ‘L’, ‘V’, ‘1’) 该参数是Flash视频,文件名后缀为.flv,它形成的文件极小、加载速度极快

cv.2VideoWriter(filename, fourcc, fps, frameSize[, isColor])

返回一个VideoWriter

  • filename:要保存的文件的路径
  • fource:指定编码器
  • fps:要保存的视频的帧率
  • frameSize:要保存的文件的画面尺寸如:(1024,1024)
  • isColor:指示是黑白画面还是彩色的画面,Ture或False
    例子:从摄像头读取一段视频并保存
import numpy as np
import cv2
 
cap = cv2.VideoCapture(0)
 
fourcc = cv2.VideoWriter_fourcc(*'XVID')
 
out = cv2.VideoWriter('testwrite.avi',fourcc, 20.0, (1920,1080),True)
 
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
 
        cv2.imshow('frame',frame)
        out.write(frame)
 
        if cv2.waitKey(10) & 0xFF == ord('q'):
            break
    else:
        break
 
cap.release()
out.release()
cv2.destroyAllWindows()

视频读取辅助操作函数

对视频对象cap操作

cap.isOpened()

判断视频对象是否读取成功,成功返回True

cap.read()

  • 返回两个值ret和frame
  • ret:布尔值,读取正确返回True,读取错误或者到读取到末尾返回False
  • frame是每一帧的图像,为三维矩阵,frame就是需要显示的内容

cap.release()

将视频cap占用的资源释放

画图操作

cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → img

在图片上画一条直线,返回处理后的图片

  • img:图片
  • pt1:起点
  • pt2:终点

cv2.circle(img, center_coordinates, radius, color, thickness)

在指定图片上画圆,返回操作后的图片

  • img:要在其上绘制圆的图像
  • center_coordinates:圆的中心坐标,坐标表示为两个值的元组,即(X坐标值,Y坐标值)
  • radius:圆的半径
  • color:它是要绘制的圆的边界线的颜色,对于BGR,我们通过一个元组,例如:(255,0,0)为蓝色
  • thickness:圆边界线的粗细像素,厚度-1像素将以指定的颜色填充整个圆

cv2.rectangle(img, start_point, end_point, color, thickness)

在指定图片上画一个矩形,返回操作后的图片

  • img:要在其上绘制矩形的图像
  • start_point:左上角坐标
  • end_point:右上角坐标
  • color:要绘制的矩形的边界线的颜色,对于BGR,我们传入一个元组,例如:(255,0,0)为蓝色
  • thickness:矩形边框线的粗细像素,厚度-1像素将以指定的颜色填充矩形形状

cv2.ellipse(img, centerCoordinates, axesLength, angle, startAngle, endAngle, color [, thickness[, lineType[, shift]]])

在指定图片上绘制一个椭圆,返回绘制后的图片

  • img:原始图像
  • centerCoordinates:椭圆的中心坐标
  • axesLength:包含两个变量的元组,分别包含椭圆的长轴和短轴(长轴长度,短轴长度)
  • angle:椭圆旋转角度,以度为单位
  • startAngle:椭圆弧的起始角度,以度为单位
  • endAngle:椭圆弧的终止角度,以度为单位
  • color:要绘制的形状边界线的颜色
  • thickness:边界线的粗细像素,厚度-1像素将用指定的颜色填充形状
  • lineType:可选参数,它给出了椭圆边界的类型
  • shift:可选参数,它表示中心坐标中的小数位数和轴的值

cv2.polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)

在给定图像img上画多边形或折线段

  • img:原始图像
  • pts:顶点
  • isClosed:是否闭合
  • color:线段颜色
  • thickness:线的厚度,如果封闭图形传入-1则填充整个图形
  • lineType:线型
  • shift:默认为0

cv2.putText(img, text, org, font, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])

在图片指定位置打印字符串

  • img:原始图像
  • text:要绘制的文本字符串
  • org:图像中文本字符串左下角的坐标,坐标表示为两个值的元组,即(X坐标值,Y坐标值)
  • font:字体类型,一些字体类型是cv2.FONT_HERSHEY_SIMPLEX,cv2.FONT_HERSHEY_PLAIN等
  • fontScale:字体比例因子乘以font-specific基本大小
  • color:要绘制的文本字符串的颜色
  • thickness:线的粗细像素
  • lineType:可选参数,它给出了要使用的行的类型
  • bottomLeftOrigin:可选参数。如果为true,则图像数据原点位于左下角。否则,它位于左上角

cv2.setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata=0)

  • winname:窗口的名字
  • onMouse:鼠标响应函数,回调函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针。 这个函数的原型应该为void on_Mouse(int event, int x, int y, int flags, void* param)
  • userdata:可选参数,传给回调函数的参数

void on_Mouse(int event, int x, int y, int flags, void* param)

  • event:事件类型
  • x,y坐标
  • flags:事件发生的时候按下鼠标的那个键
  • param:指向任意对象的指针,作为附件的参数发送给函数
    event鼠标事件
cv2.EVENT_MOUSEMOVE 滑动
cv2.EVENT_LBUTTONDOWN 左键点击
cv2.EVENT_RBUTTONDOWN 右键点击
cv2.EVENT_MBUTTONDOWN 中键点击
cv2.EVENT_LBUTTONUP 左键放开
cv2.EVENT_RBUTTONUP 右键放开
cv2.EVENT_MBUTTONUP 中键放开
cv2.EVENT_LBUTTONDBLCLK 左键双击
cv2.EVENT_RBUTTONDBLCLK 右键双击
cv2.EVENT_MBUTTONDBLCLK 中键双击

numpy相关辅助函数

np.zeros(shape,dtype=float,order=‘C’)

  • shape:形状,如(2,5)
  • dtype:数据类型,可选参数,默认numpy.float64
  • order:可选参数,c代表与c语言类似,行优先;F代表列优先
  • 返回一个给定形状和类型的用0填充的数组,实际上就是一个数组,当shape为(2,5)时,返回一个2行5列的全为0的数组,0的类型由dtype决定

numpy.array(object, dtype=None, copy=True, order=‘K’, subok=False, ndmin=0)

创建并返回一个数组

  • object:数组
  • dtype:数据类型,可选
  • copy:对象是否需要复制,可选
  • order:创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
  • subok:默认返回一个与基类类型一致的数组
  • ndmin:指定生成数组的最小维度

array.reshape()

array用具体的数组代替

  • 参数为一个N元组如:(2,3,4)表示转换成一个2页3行4列的新数组,(-1,3,4)表示转换成一个n页3行4列的的新数组,其中n由后面的维度计算出来,比如原数组一共有24个元素,则n=24/3/4=2页
    由于转换前后的数组共用一个内存,改变一个另一个也会改变,所以可以直接使用array = array.reshape((x,y))的格式
a = np.array([1,2,3,4,5,6,7,8,9])
a = a.reshape((3,3))

你可能感兴趣的:(数字图像,opencv,python)