【OpenCV学习】初识OpenCV

据说,看我文章时 关注、点赞、收藏帅哥美女们 心情都会不自觉的好起来。

前言:
作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~
✨个人主页:点我直达,在这里肯定能找到你想要的~
专栏介绍:OpenCV从入门到放弃 ,一个学习OpenCV的专栏~

人生苦短,我用python

初识OpenCV

  • 安装 OpenCV
  • 启动 Jupyter
  • 创建和销毁窗口
  • 图片在 OpenCV 中的表现

安装 OpenCV

博主学习的是通过虚拟环境来学习 OpenCV ,使用 3.4.1.15 这个版本。因为在 3.4.2 版本之后有些算法申请了专利,就用不了。
3.4.1.15 这个版本目前最高只支持到 Python3.6 ,博主就另外又安装了 Python3.6.8 作为学习 OpenCV 使用。

opencv-python 模块的下载页面查找,可以明显发现其 3.4.1.15 版本只支持 Python2.7Python3.4Python3.5Python3.6 这些版本,我们能挑到的最高版本是 Python3.6.8
【OpenCV学习】初识OpenCV_第1张图片

在官网 Python官网下载 中找到 Python3.6.8 版本。
【OpenCV学习】初识OpenCV_第2张图片

先创建并进入虚拟环境:先要使用 Python3.6.8 安装 pip install virtualenv ,才能创建虚拟环境,然后进入环境的 Scripts 目录,输入 activate 激活当前环境,出现 (OpenCV) 就代表成功进入当前环境了。
然后安装需要的一些模块:pip install opencv-python==3.4.1.15 opencv--contrib-python==3.4.1.15 jupyter matplotlib -i https://pypi.douban.com/simple
其中 opencv-pythonOpenCV 的核心库,另外的 opencv–contrib-python 是拓展库,前期可以先不安装拓展库,然后 jupyter 是网页编辑器,方便可视化, matplotlib 就是可视化库了,图像处理好后可以使用它可视化到 jupyter 的网页上。
安装成功显示:
【OpenCV学习】初识OpenCV_第3张图片

安装成功后,pip list 显示的模块。
【OpenCV学习】初识OpenCV_第4张图片
【OpenCV学习】初识OpenCV_第5张图片

启动 Jupyter

确保我们现在仍然在 Scripts 文件夹内,然后输入 jupyter notebook --notebook-dir='G:/opencvStudy/note' 以指定目录打开 jupyter 网页编辑器,出现类似图下的网页就属于启动成功了(文件列表可能不一样):
【OpenCV学习】初识OpenCV_第6张图片

Jupyter 有一些常用的快捷方式:

  • 直接 Enter 只会回车。
  • Ctrl + Enter 将会执行当前单元格。
  • Shift / Alt + Enter 将会执行当前单元格,并在下方新建一个单元格。
  • 在函数处按 Shift + Tab 可以显示简易帮助说明,按两下 Tab 可以显示详细帮助。

创建和销毁窗口

每次使用前,需要导入:

  • import cv2 :可以直接使用,但其 3.4.1.15 版本在 PyCharm 中将不会提示语法:【OpenCV学习】初识OpenCV_第7张图片
  • 但如果使用 from cv2 import cv2 :这种导入方法,在 PyCharm 中是可以显示代码提示的(纯手敲大佬请无视此区别):【OpenCV学习】初识OpenCV_第8张图片

具体情况还是得看你使用的是哪款编辑器,以及你是否是大佬~

from cv2 import cv2
# 创建窗口。
cv2.namedWindow('window', cv2.WINDOW_NORMAL)

【OpenCV学习】初识OpenCV_第9张图片

【OpenCV学习】初识OpenCV_第10张图片
【OpenCV学习】初识OpenCV_第11张图片

可以看到有三组共六钟参数,被分同一组的是由0和其他数字组成的 flags
其中 WINDOW_AUTOSIZEWINDOW_NORMAL 表示是自动调整大小(手动不可调)或是手动调整窗口;
WINDOW_FREERATIOWINDOW_KEEPRATIO 表示在调整的时候不考虑图像比例(铺满窗口)或是保持图像比例,ratio 就是比例的意思;
WINDOW_GUI_NORMALWINDOW_GUI_EXPANDED 表示绘制窗口是就方法(没有状态栏和工具栏)或是增强型GUI。(目前我还没看出来新方法哪里增强了)

from cv2 import cv2
# 创建窗口。
cv2.namedWindow('window', cv2.WINDOW_NORMAL)
# 更改窗口的大小。
cv2.resizeWindow('window', 800, 600)

更改窗口大小是先宽后高。

from cv2 import cv2
# 创建窗口。
cv2.namedWindow('window', cv2.WINDOW_NORMAL)
# 更改窗口的大小。
cv2.resizeWindow('window', 800, 600)
key = cv2.waitKey(0)
if key == ord('q'):
    print('销毁窗口')
    cv2.destroyAllWindows()

waitKey 接受一个毫秒参数,如果参数为非正整数,就一直等下去,如果指定了正整数(只能接受整数,浮点数会报错),则会等待这么长时间,如果没有等待到按键,则退出等待并返回 -1 。
如果等待到了按键,则会返回按键的 ascii 码值(一个整数值),ord('') 就是返回字符的 ascii 码值:

也只会接受 ascii 码表里的按键,像 Ctrl 、 Shift 、 Alt 这些就不会接收了,而且这些都是功能键,单独接收没有意义。

图片在 OpenCV 中的表现

首先读取的图片类型支持下图中的这些:

【OpenCV学习】初识OpenCV_第12张图片

from cv2 import cv2
# 默认是按照彩色图片来读取的。
cat = cv2.imread('./cat.jpeg')
# numpy的ndarray。
print(cat)

读取出来是一个三维数组:

【OpenCV学习】初识OpenCV_第13张图片
这里正好说明一下 numpy 的数组形状和 cv2 的有什么不同:
cv2 的参数都是先给宽,再给高;
numpy 的参数都是先给高,再给宽,因为三维数组的格式化打印,
是最外层数组是由多行组成,相当于是图片的高;
中间层数组每个是由多列组成,相当于是图片的宽。
然后颜色 R 、G 、B 都是由 0 - 255 的数组成的,换算成无符号位的二进制是 00000000 - 11111111,所以 opencv 读取出来的彩色图片会被处理成类型是uint8(8位二进制整数)的三维数组。

再来看看 matplotlib 对它的显示效果:

【OpenCV学习】初识OpenCV_第14张图片
再看看原图:

【OpenCV学习】初识OpenCV_第15张图片
是不是发现这个猫有明显的颜色变化?
这是因为 opencv 读进来的图片数据的通道不是默认的RGB,而是BGR,完全相反的颜色数组,要想正常显示,可以对数组的最内层施加反向操作:

from cv2 import cv2
import matplotlib.pyplot as plt
# 默认是按照彩色图片来读取的。
cat = cv2.imread('./cat.jpeg')
# numpy的ndarray。
for row in range(len(cat)):
     for col in range(len(cat[row])):
         cat[row][col] = cat[row][col][::-1]
plt.imshow(cat)
plt.show()

经过这样处理后的颜色就正常了,可爱的猫咪又出现了~:
【OpenCV学习】初识OpenCV_第16张图片

你可能感兴趣的