赞
踩
本文章是个人的自学笔记,有需要的朋友可以一起学习,写的不好的地方请谅解!
目录
v2.imread(filename, flags) :读取加载图片
cv2.imshow(winname, mat) : 显示图片
cv2.imwrite(filename, img) : 保存图片
cv2.namedWindow(winname, 属性):创建一个窗口
cv2.resizeWindow(winname, width, height)设置某个窗口大小
cv2.destroyWindow(winname):销毁某个窗口
cv2.destroyAllWindows():销毁所有窗口
OpenCV 的出现极大地方便 了计算机视觉研究人员的算法验证,得到了众多研究者的喜爱。 经 过 20 年的发展,它已经成为计算机视觉领域最重要的研究工具之一
OpenCV的目标之一是提供一个简单易用的计算机视觉基础库,帮助人们快速构建复杂的视觉应用程序。 OpenCV库包含超过500个涵盖视觉领域的功能,包括产品检测,医疗成像,安全性,用户界面,摄像机校准,立体视觉和机器人。
那么今天我们就来学习以下opencv的基础
- import cv2
-
-
- # 读取图片,第二个参数为False时,显示为灰度图像,True为原图
- img = cv2.imread('c:\\people.jpg', flags=False)
-
- # 显示图片,第一个参数为图片的标题, 第二个参数为你要展示的图片
- cv2.imshow('image title', mat=img)
-
- # 等待图片的关闭,不写这句图片会一闪而过,可以设置参数,为多少毫秒自动关闭
- #例:cv2.waitKey(1000)为一秒后关闭,不写默认为零
- cv2.waitKey(0)
-
- # 保存图片,将灰度图片保存为
- cv2.imwrite('c:\\Grey_img.jpg', img)
winname作为窗口的唯一标识,如果想使用指定窗口显示目标图像,需要让cv2.imshow(winname)中的winname与窗口的winname需要保持一致。
窗口创建时可以添加的属性:
cv2.WINDOW_NORMAL:窗口大小可以改变(同cv2.WINDOW_GUI_NORMAL)
cv2.WINDOW_AUTOSIZE:窗口大小不能改变
cv2.WINDOW_FREERATIO:窗口大小自适应比例
cv2.WINDOW_KEEPRATIO:窗口大小保持比例
cv2.WINDOW_GUI_EXPANDED:显示色彩变成暗色
cv2.WINDOW_FULLSCREEN:全屏显示cv2.WINDOW_OPENGL:支持OpenGL的窗口
- #设置窗口退出按键
- #如果不设置的话,当按下任意键时窗口都会关闭
- #设计思路,让其死循环,直到输入'q'
- import cv2
-
- cv2.namedWindow('img', cv2.WINDOW_NORMAL) #创建一个窗口
- cv2.resizeWindow('img', 640, 480) #设置窗口大小
- img = cv2.imread('C:\\picture\\20170701031428774.jpg') #读取图片
- while True: #键盘只有输入'q'时退出
- cv2.imshow('img', img) #显示图片
- key = cv2.waitKey() #等待
- if (key & 0xFF == ord('q')):
- print('qqqq')
- break
- elif (key & 0xFF == ord('s')):
- print('ssss')
- cv2.destroyAllWindows() #销毁所有窗口

原型:VideoCapture(*args,**kwargs)
作用:初始化VideoCapture类并利用构造函数读入该视频的当前帧。
参数:一般仅填入一个,即文件名。如果填入整数,则打开对应的捕获设备ID。若为0,则打开默认摄像头。
参数:无
作用:关闭文件/摄像头
参数:无
作用:关闭文件/摄像头
参数:无
返回值:bool,numpy.array
作用:读取该文件/摄像头的下一帧,成功与否由bool返回值决定,返回的帧矩阵为第二个参数
参数:无
作用:判断设备/文件是否读取成功,若成功,返回True
- # 利用opencv将视频数据录制成多媒体文件
- import cv2
-
- # 创建videoWriter为写多媒体文件
- # 创建窗口
- cv2.namedWindow('video', cv2.WINDOW_NORMAL)
- cv2.resizeWindow('video', 640, 480)
- cap = cv2.VideoCapture(0)
- # 获取摄像头帧宽度
- width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
- # 获取摄像头帧高度
- height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
- # 视频编码格式
- fourcc = cv2.VideoWriter_fourcc(*'mp4v')
- print(width)
- print(height)
- # 第四个参数一定要与自己摄像头采集的分辨率一致
- vw = cv2.VideoWriter('c:\\picture\\out.mp4', fourcc, 20, (width, height))
- while cap.isOpened():
- # 将视频帧在窗口中显示
- ret, frame = cap.read()
- cv2.imshow('video', frame)
- # 防止视频框变大,再设置一次窗口大小
- cv2.resizeWindow('video', 640, 480)
-
- # 写数据到多媒体文件
- vw.write(frame)
- # 等待键盘事件如果'q'退出
- key = cv2.waitKey(40)
- if (key & 0xFF == ord('q')):
- break
-
- # 释放Videocapture
- cap.release()
- # 释放videoWrite
- vw.release()
- # 销毁所有窗口
- cv2.destroyAllWindows()

演示就不演示了,长得不帅,大家可以自己试一下,前提自己的设备有摄像头.
- # 利用opencv从多媒体文件中读取视频帧
- import cv2
-
- cv2.namedWindow('video', cv2.WINDOW_NORMAL) #创建窗口
- cv2.resizeWindow('video', 640, 480)
- # 从视频文件中读取视频帧
- cap = cv2.VideoCapture('C:\\picture\\ikun.mp4')
-
- while True:
- ret, frame = cap.read()
- cv2.imshow('video', frame) #将视频帧在窗口中显示
-
- key = cv2.waitKey(40) #等待键盘事件如果'q'退出
- if (key & 0xFF == ord('q')):
- break
-
- cap.release() #释放Videocapture
-
- cv2.destroyAllWindows()

原型:cv2.VideoWriter(*args,**kwargs)
参数:第一个,写入的视频文件名。第二个,由cv2.VideoWriter_fourcc返回的视频制式特定代码,通常有XVID,MPEG等。第三个,该视频的fps。第四个,一个tuple,为该视频的宽、高。
参数:无
作用:释放videoWriter
原型:VideoCapture.write(image)
作用:将当前帧内容写入视频文件
参数:image,写入的当前帧
- # 利用opencv将视频数据录制成多媒体文件
- import cv2
-
- # 创建videoWriter为写多媒体文件
- # 创建窗口
-
- cv2.namedWindow('video', cv2.WINDOW_NORMAL)
- cv2.resizeWindow('video', 640, 480)
-
- cap = cv2.VideoCapture(0)
- # 获取摄像头帧宽度
- width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
-
- # 获取摄像头帧高度
- height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
-
- # 视频编码格式
- fourcc = cv2.VideoWriter_fourcc(*'mp4v')
- print(width)
- print(height)
- # 第四个参数一定要与自己摄像头采集的分辨率一致
-
- vw = cv2.VideoWriter('c:\\picture\\out.mp4', fourcc, 20, (width, height))
- # 判断摄像头是否为打开状态
- while cap.isOpened():
-
- # 将视频帧在窗口中显示
- ret, frame = cap.read()
-
- # 采集数据判断是否获取到了
- if (ret == True):
- cv2.imshow('video', frame)
-
- # 防止视频框变大,再设置一次窗口大小
- cv2.resizeWindow('video', 640, 480)
-
- # 写数据到多媒体文件
- vw.write(frame)
- # 等待键盘事件如果'q'退出
- key = cv2.waitKey(40)
- if (key & 0xFF == ord('q')):
- break
- else:
- break
-
- # 释放Videocapture
- cap.release()
- # 释放videoWrite
- vw.release()
- # 销毁所有窗口
- cv2.destroyAllWindows()

(这里后面还会用到用鼠标画彩色矩形,可以先了解)
void SetMouseCallback(const string & winname,MouseCallback onMouse,void* userdata=0)
其中函数指针原型:
void Foo(int event ,int x ,int y ,int flags ,void * param)
event 是鼠标响应类型,CV_EVENT_*变量之一:
EVENT_MOUSEMOVE滑动
EVENT_LBUTTONDOWN 左击
EVENT_RBUTTONDOWN 右击
EVENT_MBUTTONDOWN中键点击
EVENT_LBUTTONUP 左键放开
EVENT_RBUTTONUP 右键放开
EVENT_LBUTTONDBLCLK左键双击
EVENT_RBUTTONDBLCLK 右键双击
EVENT_MBUTTONDBLCLK 中键双击
x和y是鼠标指针在图像坐标系的坐标(不是窗口坐标系)。
flags是CV_EVENT_FLAG的组合,flag的状态有:
EVENT_FLAG_LBUTTON 左键拖拽
EVENT_FLAG_RBUTTON 右键拖拽
EVENT_FLAG_MBUTTON 中键拖拽
EVENT_FLAG_CTRLKEY 按住Ctrl不放
EVENT_FLAG_SHIFTKEY 按住Shift不放
EVENT_FLAG_ALTKEY 按住Alt不放
param是用户定义的传递到setMouseCallback函数调用的参数。
- import cv2
- import numpy as np
-
-
- def mouse_callback(event, x, y, flags, userdata):
- print(event, x, y, flags, userdata)
-
-
- # mouse_callback(1, 100, 100, 16, "666")
-
- # 创建窗口
- cv2.namedWindow('mouse', cv2.WINDOW_NORMAL)
- cv2.resizeWindow('mouse', 640, 480)
-
- # 设置窗口回调
- cv2.setMouseCallback('mouse', mouse_callback, "123")
- #生成一个黑色图像
- img = np.zeros((360, 640, 3), np.uint8)
-
- while True:
- cv2.imshow('mouse', img)
- key = cv2.waitKey(1)
- if (key & 0xFF == ord('q')):
- break
-
-
- cv2.destroyAllWindows()

在这里我就不讲解Trackbar控件,这里有篇文章介绍
- import cv2
- import numpy as np
-
-
- def callback():
- pass
-
-
- # 创建窗口
- cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL)
- cv2.resizeWindow('trackbar', 640, 480)
- # 创建Trackbar
-
- cv2.createTrackbar('R', 'trackbar', 0, 255, callback)
- cv2.createTrackbar('G', 'trackbar', 0, 255, callback)
- cv2.createTrackbar('B', 'trackbar', 0, 255, callback)
-
- # 创建一个背景图片纯黑色
- img = np.zeros((480, 640, 3), np.uint8)
-
- while True:
- # 获取当前Trackbar的值
- r = cv2.getTrackbarPos('R', 'trackbar')
- g = cv2.getTrackbarPos('G', 'trackbar')
- b = cv2.getTrackbarPos('B', 'trackbar')
- # 改变图片颜色
- img[:] = [b, g, r]
- # 展示图片
- cv2.imshow('trackbar', img)
- key = cv2.waitKey(10)
- if (key & 0xFF == ord('q')):
- break
-
- # 销毁所有窗口
- cv2.destroyAllWindows()

这里是一个简单的调色板
参考博客:
https://blog.csdn.net/Vici__/article/details/100714822
学习视频:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。