1.图像
先定一个小目标学习两个个功能
1.学习怎样读入一副画像,以及如何保存一副图像
2.学习三个函数cv2.imread(), cv2.imshow() , cv2.imwrite()
1.1读入图像:
使用函数cv2.imread()读入图像
import numpy as np import cv2 mgs = cv2.imread('./picture/mingren.jpg', 0) print(mgs)
显示的结果是
[[239 240 241 ... 223 223 224] [240 239 239 ... 224 225 227] [239 239 239 ... 222 226 228] ... [115 121 116 ... 182 187 183] [113 126 120 ... 183 183 182] [113 111 110 ... 176 176 176]]
那么我们把0改成1试试看
[[[214 244 239] [213 245 240] [213 247 241] ... [219 223 224] [218 223 224] [215 226 224]] [[212 246 240] [211 245 239] [207 244 240] ... [220 225 224] [220 226 225] [218 229 226]] [[207 245 239] [207 244 240] [204 245 240] ... [218 223 221] [221 228 223] [221 232 224]] ... [[101 93 164] [107 101 166] [104 101 150] ... [157 179 197] [162 184 202] [156 180 198]] [[ 97 83 179] [112 97 188] [106 96 173] ... [156 180 200] [156 180 200] [154 179 199]] [[102 91 161] [100 88 160] [ 99 87 159] ... [148 170 198] [148 170 198] [148 170 198]]]
1.2显示图像
cv2.imshow('this_is_mr', mgs) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.imshow('this_is_mr', mgs)
此条代码是展示一个窗口 窗口叫做 this_is_mr
a = cv2.waitKey(0)
这个函数为等待输入一个数值 返回ASCII码
cv2.destroyAllWindows()
关闭所有窗口
print(a)
使用函数 cv2.imread() 读入图像。这幅图像应该在此程序的工作路径,或者给函数提供完整路径,第二个参数是要告诉函数应该如何读取这幅图片。
• cv2.IMREAD_COLOR:读入一副彩色图像。图像的透明度会被忽略,这是默认参数。
• cv2.IMREAD_GRAYSCALE:以灰度模式读入图像
• cv2.IMREAD_UNCHANGED:读入一幅图像,并且包括图像的 alpha 通道
cv2.waitKey() 是一个键盘绑定函数。需要指出的是它的时间尺度是毫秒级。函数等待特定的几毫秒,看是否有键盘输入。特定的几毫秒之内,如果按下任意键,这个函数会返回按键的 ASCII 码值,程序将会继续运行。如果没有键盘输入,返回值为 -1,如果我们设置这个函数的参数为 0,那它将会无限期的等待键盘输入。它也可以被用来检测特定键是否被按下,例如按键 a 是否被按下,这个后面我们会接着讨论。
cv2.destroyAllWindows() 可以轻易删除任何我们建立的窗口。如果你想删除特定的窗口可以使用 cv2.destroyWindow(),在括号内输入你想删除的窗口名。
cv2.namedWindow('what',cv2.WINDOW_NORMAL) # 此时是先粗线矿在加载图片且框发大小都可以改变 倘若后面参数是cv2.WINDOW_AUTOSIZE cv2.waitKey(0) # 就不可以改变 cv2.imshow('what', mgs)
# 如果你用的是 64 位系统,你需要将 k = cv2.waitKey(0) 这行改成k = cv2.waitKey(0)&0xFF。 cv2.waitKey(0) cv2.destroyAllWindows()
2.视频
1.读取视频文件显示视频保存视频文件
2.从摄像头获取并显示视频 学习以下函数cv2.VideoCapture(),cv2.VideoWrite()
2.1用摄像头获取视频
为了获取视频,应该先创建一个cideocapture对象。他的参数就是设备的索引设备索引号就是在指定要使用的摄像头。一般的笔记本电脑都有内置摄像头。所以参数就是 0。你可以通过设置成 1 或者其他的来选择别的摄像头。之后,你就可以一帧一帧的捕获视频了最后需要停止捕获
import numpy as np import cv2 text1 =cv2.VideoCapture(0) while(True): # 一帧一帧读取画面 ret, frame = text1.read() gary = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) # 转成灰色 cv2.imshow('what', gary) if cv2.waitKey(1) & 0xFF == ord('q'): break text1.release() # 释放 cv2.destroyAllWindows()
cap.read() 返回一个布尔值(True/False)。如果帧读取的是正确的,就是 True。所以最后你可以通过检查他的返回值来查看视频文件是否已经到了结尾。
有时 cap 可能不能成功的初始化摄像头设备。这种情况下上面的代码会报错。你可以使用 cap.isOpened(),来检查是否成功初始化了。如果返回值是True,那就没有问题。否则就要使用函数 cap.open()。
你可以使用函数 cap.get(propId) 来获得视频的一些参数信息。这里propId 可以是 0 到 18 之间的任何整数。每一个数代表视频的一个属性
如下
- CV_CAP_PROP_POS_MSEC视频文件的当前位置(以毫秒为单位)或视频捕获时间戳。
- CV_CAP_PROP_POS_FRAMES接下来要解码/捕获的帧的基于0的索引。
- CV_CAP_PROP_POS_AVI_RATIO视频文件的相对位置:0 - 电影的开始,1 - 电影的结尾。
- CV_CAP_PROP_FRAME_WIDTH视频流中帧的宽度。
- CV_CAP_PROP_FRAME_HEIGHT视频流中帧的高度。
- CV_CAP_PROP_FPS帧速率。
- CV_CAP_PROP_FOURCC编解码器的4字符代码。
- CV_CAP_PROP_FRAME_COUNT视频文件中的帧数。
- CV_CAP_PROP_FORMAT返回的Mat对象的格式
retrieve()
。 - CV_CAP_PROP_MODE指示当前捕获模式的特定于后端的值。
- CV_CAP_PROP_BRIGHTNESS图像的亮度(仅适用于相机)。
- CV_CAP_PROP_CONTRAST图像对比度(仅适用于相机)。
- CV_CAP_PROP_SATURATION图像的饱和度(仅适用于相机)。
- CV_CAP_PROP_HUE图像的色调(仅适用于相机)。
- CV_CAP_PROP_GAIN图像的增益(仅适用于相机)。
- CV_CAP_PROP_EXPOSURE曝光(仅适用于相机)。
- CV_CAP_PROP_CONVERT_RGB布尔标志,指示是否应将图像转换为RGB。
- CV_CAP_PROP_WHITE_BALANCE_U白平衡设置的U值(注意:目前仅支持DC1394 v 2.x后端)
- CV_CAP_PROP_WHITE_BALANCE_V白平衡设置的V值(注意:目前仅支持DC1394 v 2.x后端)
- CV_CAP_PROP_RECTIFICATION立体摄像机的整流标志(注意:目前仅支持DC1394 v 2.x后端)
- CV_CAP_PROP_ISO_SPEED摄像机的ISO速度(注意:目前仅支持DC1394 v 2.x后端)
- CV_CAP_PROP_BUFFERSIZE存储在内部缓冲存储器中的帧数(注意:目前仅支持DC1394 v 2.x后端)