本次学习内容是记录数字图像处理初学知识,包括基本的环境搭建,可能遇到的问题和解决方法以及基本的读取图片视频等opencv操作实现
函数查询网址:地址
目录
- 软件下载
- 软件安装
- anaconda编程环境选择和搭建
- opencv的添加
- pycharm的配置及工程建立
- 图像的读取显示保存等基本操作
- 视频读取操作
1.软件下载
环境是基于win10系统的anaconda+pycharm,python版本为3.7.
anaconda采用2019.10月的anaconda3版本,下载源在清华镜像或者公众号
清华镜像源anaconda
pycharm是2019版本,来自软件管家公众号。
2.软件安装
pycharm按照教程安装即可,anaconda3在安装时出现下图时
建议勾选两个勾,可以避免添加环境变量。
3.anaconda编程环境选择和搭建
下图中右边绿色√的就是已经在base环境里面安装的包了,我们学习需要keras-gpu系列的和opencv的包,先在里面all里搜索keras-gpu(电脑要有显卡,集显也可),由于在这个版本的anaconda中装keras-gpu这个包,点击下载后会自动安装关联的tensor等包,所以只需要这一个
anaconda的下载源(即资源链接)是官方的default,一般下载很慢,所以要换成清华镜像
这里的方法是用一句命令在anaconda prompt中使用
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
此时可以通过在prompt中重新输入
conda config --show-sources
展示出现在base所含的源
正常情况下应该和这个一致,注意有两个TRUE
很多人没有下面的那个true通常还需要使用下面的命令进行添加链接
conda config --set show_channel_urls yes
有两个源之后在anaconda的软件中的channel可以看到有两个,可以删掉default
搜索需要的包keras-gpu安装就行了
4.opencv的添加
在anaconda中搜索的opencv无法安装,应该是因为python3.7还没有对应的下载源,这里可以使用pip命令的方式安装。
openCV库 下载地址 点这里跳转
opencv_python‑3.4.2‑cp37‑cp37m‑win_amd64.whl(cp37指的是python的版本,win_amd64是指python是64位的,也有可能有人64位的系统装了32位的python,这时候就需要装win32的版本)
我是python3.7的所以文件名要找cp37的,3.4.2可以不用管,注意x64位版本。
下载后放到anaconda软件的安装目录下的site-package文件夹里面,然后在cmd里面通过找到该路径(如果anaconda在D盘的话输入D: 回车 跳转到D目录下再输入cd 路径跳转到包的目录,最后通过pip install 文件名
(要带后缀whl的文件名))
安装可以通过以下方法验证:
cmd->输入python回车->import cv2 +回车
不报错的话就可以了
5.pycharm的配置及工程建立
打开pycharm后可以新建工程,在工程中新建python file即py代码文件,现在需要把编程环境引用到工程里,在设置中有个工程/项目选型里面有个project interpreter选型里面可以选择齿轮,add一个环境,我这里选择的是conda environment->exist environment里面选择anaconda安装目录里的python.exe就行了。
上图就是已经添加进来了,接下来就可以开始编程了。
6.图像的读取显示保存等基本操作
opencv手册
1)图片操作命令:
cv2.imread(文件名,标记)读入图像
标记0灰度图,1为原图
import cv2
img = cv2.imread('45.jpg',0)
45.jpg这种直接输入文件名的需要将其放入工程也可以如下方式操作
img = imread("C:/daima practice/opencv/mat3/mat3/image4.jpg",1) #以路径方式读取原图
imshow(“显示灰度图”,img)
参数1:显示图片的窗口名称。
参数2:储存图片数据的对象。
- cv2.waitKey()等待键盘输入,为毫秒级等待按下函数:参数如果写负数或者0。当显示图片后,按下任意键后程序退出。如果参数写为3000就是3秒后程序自动退出。
- cv2.destroyAllWindows()可以轻易删除任何我们建立的窗口,括号内输入想删除的窗口名
cv2.namedWindow(‘窗口名’,cv2.WINDOW_NORMAL)
创建一个窗口
cv2.imwrite(‘文件名.格式’,对象)
将对象保存为指定文件
eg:
k = cv2.waitKey(0)
if k==27:
cv2.destroyAllWindows() #wait for ESC key to exit
elif k == ord('s'):
cv2.imwrite('46.png',img) #wait for 's' key to save and exit
cv2.destoryAllWindows()
另外在plt中也有对应的方法
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # 隐藏 x 轴和 y 轴上的刻度值
plt.show()#另有plt.title(‘名字’)的方法添加标题
PS:imshow()接收一张图像,只是画出该图,并不会立刻显示出来。imshow后还可以进行其他draw操作,比如scatter散点等。所有画完后使用plt.show()才能进行结果的显示。
7.视频读取操作
1)摄像头获取视频
import cv2
cap = cv2.VideoCapture(0)#*0为默认摄像头,1可以更换来源*
while True:
# 逐帧捕获
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
gray = cv2.cvtColor(frame , cv2.COLOR_BGR2GRAY)#取灰度图
cv2.imshow('frame',gray)
if cv2.waitKey(1) &0xFF ==ord('q'): #按q键退出
break
#当任何事被做则退出
cap.release()
cv2.destroyAllWindows()
注:可以使用cap.get(propId)来获取视频的一些参数信息。propId可以是0到18之间的任何数,每一个数代表一个属性,自己可以尝试一下。
其中一些值可以使用cap.set(propId,value)来修改,例如cap.get(3)和cap.get(4)来查看每一帧的宽和高,默认是640x480。我们可以使用ret=cap.set(3,320)和ret = cap.set(4,240)来把宽和高改成320x240。
但是要在取帧以前
cv2.flip(frame,1) #镜像翻转
2)通过视频文件打开视频
只需要将cv2.VideoCapture的参数改为视频文件名