文章目录
图像的加载与保存
文件路径
参考链接:
OpenCV的坐标方向
- 坐标原点在图像左上角
- 行数,rows其实对应于坐标轴上的y,即表示的是图像的高度,竖直方向
- 列数,cols对应于坐标轴上的x,即表示的是图像的宽度,水平方向
参考链接:
cv2.imread
读取一张图片
def imread(filename: Any,flags: Any = None) -> retval
- flag = -1,8位深度,原通道
- flag = 0,8位深度,1通道
- flag = 1,8位深度,3通道
- flag = 2,原深度, 1通道
- flag = 3,原深度, 3通道
- flag = 4,8位深度,3通道
cv2.imwrite
保存一张图片
imwrite(filename, img[, params]) -> retval
cv2.namedWindow
创建GUI
def namedWindow(winname: Any,flags: Any = None) -> None
cv2.imshow
显示图片
def imshow(winname: Any,mat: Any) -> None
cv2.waitkey
在一个给定的时间内(单位ms)等待用户按键触发,0表示无限制等待用户按键触发
waitKey([, delay]) -> retval
在cv2.imshow()之后要跟着一句cv2.waitkey()。
源码注释如下:
This function should be followed by cv::waitKey function which displays the image for specified . milliseconds. Otherwise, it won’t display the image.
This function is the only method in HighGUI that can fetch and handle events, so it needs to be .
这个函数是HighGUI窗口中唯一的获取和处理事件的方法,因此它必须存在。
实际上,waitkey控制着imshow的持续时间,当imshow之后不跟waitkey时,相当于没有给imshow提供时间展示图像,所以只有一个空窗口一闪而过。添加了waitkey后,哪怕仅仅是cv2.waitkey(1),我们也能截取到一帧的图像。所以cv2.imshow后边是必须要跟cv2.waitkey的。
尤其是在显示视频时,如果使用 waitKey(0) 则只会显示第一帧视频。
示例
src = cv.imread("C:/Users/22164/Desktop/zhou.jpg")
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
cv.namedWindow("import image", cv.WINDOW_AUTOSIZE) # 创建GUI
cv.imshow("import image", src)
cv.waitKey()
cv.imwrite("C:/Users/22164/Desktop/zhouCopy.jpg", src) # 保存到桌面
cv.imwrite("C:/Users/22164/Desktop/zhouCopyGray.jpg", gray) # 保存灰度图到桌面
video_demo()
get_image_info(src)
cv.destroyAllWindows()
copy
复制一份图片
注意: 使用图像前可以复制一份
shape
返回图片的高,宽,通道数
- image.shape[0], 图片垂直尺寸
- image.shape[1], 图片水平尺寸
- image.shape[2], 图片通道数
视频的读取与保存
cv2.VideoCapture
视频文件的读取
参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频
cv2.flip
图像翻转
flip(src, flipCode[, dst]) -> dst
示例
def video_demo():
# capture = cv.VideoCapture(0)
# 要用这个,之前那个有点报错。0是打开摄像头,也可以是输入视频文件的路径
capture = cv2.VideoCapture(0, cv2.CAP_DSHOW)
while 1:
ret, frame = capture.read()
frame = cv.flip(frame, 1) # 图像翻转
cv.imshow("video", frame)
c = cv.waitKey(50)
if c == 27: # 表示键盘输入的是ESC
break