opencv
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、Ruby的支持。
1、图像读入:cv2.imread()
import cv2
# Load an color image in grayscale 12
img = cv2.imread('3.png',4)# 读取图片,第一个参数表示图片的名字,第二个参数指定了所读取图片的颜色类型,
# >0返回3通道彩色图;=0返回灰度图;<0返回原图(带alpha 通道)
# flag=-1时,8位深度,原通道
# flag=0,8位深度,1通道
# flag=1, 8位深度 ,3通道
# flag=2,原深度,1通道
# flag=3, 原深度,3通道
# flag=4,8位深度 ,3通道
2、显示图像:cv2.imshow()
cv2.imshow('image',img)# 显示图片 第一个参数是窗口的名字,第二个才是图片
cv2.waitKey(0)# 等待时间,单位毫秒,一般与cv2.imshow()搭配使用
# cv2.waitKey() 是一个键盘绑定函数。需要指出的是它的时间尺度是毫秒级。函数等待特定的几毫秒,看是否有
# 键盘输入。特定的几毫秒之内,如果按下任意键,这个函数会返回按键的ASCII 码值,程序将会继续运行。如果
# 没有键盘输入,返回值为-1,如果我们设置这个函数的参数为0,那它将会无限期的等待键盘输入。它也可以被用来检测特定键是否被按下,例如按键a 是否被按下
cv2.destroyAllWindows()
# cv2.destroyAllWindows() 可以轻易删除任何我们建立的窗口。如果
# 你想删除特定的窗口可以使用cv2.destroyWindow(),在括号内输入你想删
# 除的窗口名。
3、保存图像:cv2.imwrite()
cv2.imwrite('lena.png',img)
# 保存一个图像。第一个参数是要保存的文件名,第二个参数是要保存的图像。可选的第三个参数,它针对特定
# 的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是
# 压缩级别。默认为3
4、操作摄像头
import cv2
cv2.VideoCapture(0)
# VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频,
# 如cap = cv2.VideoCapture("../test.avi")
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# cap.read()按帧读取视频,ret,frame是获cap.read()方法的两个返回值。 其中ret是布尔值,如果
# 读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,
# 是个三维矩阵。
# Our operations on the frame come here 1
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 彩色图像转为灰度图像
# Display the resulting frame
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
# 显示视频时,waitKey()延迟时间需要设置为 大于0的参数
# 参数是1,表示延时1ms切换到下一帧图像,对于视频而言;
# 参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,;
# 参数过大如cv2.waitKey(1000),会因为延时过久而卡顿感觉到卡顿。
break
# 等待一秒并且如果键盘输入q,直接退出
# When everything done, release the capture
cap.release()# 内存释放
cv2.destroyAllWindows()# 关闭所有的HighGUI窗口
5、保存摄像头录像文件
import cv2
cap = cv2.VideoCapture(0)# 捕获图像流
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')# 使用mp4编码器
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (640, 480))
#分别是:保存文件名、编码器、帧率、视频宽高
while (cap.isOpened()):
ret, frame = cap.read()
if ret == True:
frame = cv2.flip(frame, 0)
# 第一个参数是图片,第二个是flipcode,flipcode控制翻转效果
#flipcode = 0:沿x轴翻转
# flipcode > 0:沿y轴翻转
# flipcode < 0:x,y轴同时翻转
out.write(frame)# # 保存录像结果
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
6、图片上画出几何图形
import numpy as np
import cv2
img = cv2.imread('2.jpg', 1)
font = cv2.FONT_HERSHEY_SIMPLEX # 使用默认字体
cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5) # 画直线
# 图片 起点 终点 颜色 线宽
cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)
# 画矩形 被画图片 起顶点 终顶点 颜色 线宽
cv2.circle(img, (447, 63), 63, (0, 0, 255), -1)
# 画圆 被画图片 圆心 半径 颜色 线宽(-1代表内部涂满色)
imge = cv2.putText(img, 'Hello world', (0, 400), font, 1.2, (128, 255, 76), 2)
# 在图上写字 被写图 字的内容 起始位置 字体 大小 颜色 笔画宽
cv2.imshow('ssimage', imge)
cv2.waitKey(0)
7、numpy.zeros(创建0矩阵)
返回给定形状和类型的新数组,用零填充。
numpy.zeros(shape, dtype=float, order=’C’)
shape:int或ints序列
新数组的形状,例如(2,3 )或2。
dtype:数据类型,可选
数组的所需数据类型,例如numpy.int8。默认值为 numpy.float64。
order:{'C','F'},可选
是否在存储器中以C或Fortran连续(按行或列方式)存储多维数据。
import numpy as np
a = np.zeros(5)
a
array([0., 0., 0., 0., 0.])
# 创建一个一维数组,只使用一个参数就可以了
# 在默认情况下,zeros创建的数组是浮点型的
b = np.zeros(5,np.uint8)
b
array([0, 0, 0, 0, 0], dtype=uint8)
# 假如需要使用其他类型,可以设置dtype参数
c = np.zeros((5,2),np.uint8)
c
array([[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0]], dtype=uint8)
d = np.zeros((5,2,3),np.uint8)
d
array([[[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],
[0, 0, 0]]], dtype=uint8)
d1 = np.zeros((5,3,4),np.uint8)
d1
array([[[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, 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, 0, 0],
[0, 0, 0, 0]]], dtype=uint8)
e = np.zeros((5,2,3,4),np.uint8)
e
array([[[[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, 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, 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, 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]],
[[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]]], dtype=uint8)
网友评论