没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
16页
pythonopen-cv基础知识总结(⼀) 此OpenCV教程仅供初学者开始学习基础知识。在本指南中,您将学习使⽤Python使⽤OpenCV库进⾏的基本图像处理操作。 在本教程中,我们将创建两个Python脚本来帮助您学习OpenCV基础知识: 第⼀个脚本 opencv_tutorial_01.py 将介绍基本图像处理操作( jp.png )。 第⼆个脚本 opencv_tutorial_02.py 将向您展⽰如何使⽤opencv计算俄罗斯⽅块图像中的对象数量(tetris_blocks.png )。 ⽬录 1. 加载并显⽰图像 1 # import the necessary packages 2 import imutils 3 import cv2 4 5 # load the input image and show its dimensions, keeping in mind that 6 # images are represented as a multi-dimensional NumPy array with 7 # shape no. rows (height
资源推荐
资源详情
资源评论
pythonopen-cv基础知识总结(⼀)
此OpenCV教程仅供初学者开始学习基础知识。在本指南中,您将学习使⽤Python使⽤OpenCV库进⾏的基本图像处理操作。
在本教程中,我们将创建两个Python脚本来帮助您学习OpenCV基础知识:
第⼀个脚本 opencv_tutorial_01.py 将介绍基本图像处理操作( jp.png )。
第⼆个脚本 opencv_tutorial_02.py 将向您展⽰如何使⽤opencv计算俄罗斯⽅块图像中的对象数量(tetris_blocks.png )。
⽬录
1. 加载并显⽰图像
1 # import the necessary packages
2 import imutils
3 import cv2
4
5 # load the input image and show its dimensions, keeping in mind that
6 # images are represented as a multi-dimensional NumPy array with
7 # shape no. rows (height) x no. columns (width) x no. channels (depth)
8 image = cv2.imread("jp.png")
9 (h, w, d) = image.shape
10 print("width={}, height={}, depth={}".format(w, h, d))
11
12 # display the image to our screen -- we will need to click the window
13 # open by OpenCV and press a key on our keyboard to continue execution
14 cv2.imshow("Image", image)
15 cv2.waitKey(0)
在第2⾏和第3⾏,我们同时导⼊了imutils和cv2。 cv2是OpenCV软件包,尽管写的是cv2,但实际上可以是OpenCV 3(或可能是
OpenCV 4)。 imutils软件包是我的⼀系列便利功能。
现在,我们已经导⼊所需的软件包,现在将图像从磁盘加载到内存中。
我们调⽤cv2.imread(“ jp.png”)。 正如您在第8⾏看到的那样,我们将结果分配给image。 我们的图像实际上只是⼀个NumPy数
组。
在此脚本的后⾯,我们将需要⾼度和宽度。 因此,在第9⾏中,我调⽤image.shape来提取⾼度,宽度和深度。
⾼度先于宽度似乎让⼈感到困惑,但是以这种⽅式思考:
我们通过⾏数x列数描述矩阵
⾏数是我们的⾼度
列数就是我们的宽度
因此,表⽰为NumPy数组的图像的尺⼨实际上表⽰为(⾼度,宽度,深度)。
深度是通道数-在我们的例⼦中是3,因为我们正在使⽤3种颜⾊通道:蓝⾊,绿⾊和红⾊。
第10⾏显⽰的打印命令会将值输出到终端:
width=600, height=322, depth=3
为了使⽤OpenCV在屏幕上显⽰图像,我们在第14⾏使⽤cv2.imshow(“ Image”,image)。下⼀⾏等待按键(第15⾏)。 这⼀点很
重要,否则我们的图像显⽰和消失的速度将⽐我们看到图像还要快。
注意:
您实际上需要单击由OpenCV打开的活动窗⼝,然后按键盘上的某个键以前进脚本。 OpenCV⽆法监视您的终端的输⼊,因此如果
您在终端中按⼀个键,OpenCV不会注意到。 同样,您将需要单击屏幕上活动的OpenCV窗⼝,然后按键盘上的⼀个键。
2. 访问单个像素
⾸先,您可能会问:
什么是像素?
所有图像都由像素组成,这些像素是图像的原始构建块。图像由⽹格中的像素组成。640 x 480图像具有640列(宽度)和480⾏(⾼
度)。有640 * 480 = 307200 具有这些尺⼨的图像中的像素。
灰度图像中的每个像素都有⼀个代表灰度的值。在OpenCV中,有256种灰度(从0到255)。因此,灰度图像将具有与每个像素关联的灰
度值。
彩⾊图像中的像素具有其他信息。在学习图像处理时,您很快就会熟悉⼏种⾊彩空间。为简单起见,我们仅考虑RGB颜⾊空间。
在OpenCV彩⾊图像中,RGB(红⾊,绿⾊,蓝⾊)颜⾊空间中的每个像素都有⼀个三元组: (B,G,R ) 。
注意,
顺序是BGR⽽不是RGB。这是因为多年前⾸次开发OpenCV时,标准是BGR订购。多年来,标准现已成为RGB,但OpenCV仍保持
这种“传统” BGR顺序以确保不存在现有代码中断。
BGR 3元组中的每个值的范围为 [ 0 ,255 ] 。OpenCV中RGB图像中的每个像素有多少种颜⾊可能性?这很容易:256 * 256 * 256 =
16777216 。
既然我们确切地知道什么是像素,让我们看看如何检索图像中单个像素的值:
17 # access the RGB pixel located at x=50, y=100, keepind in mind that
18 # OpenCV stores images in BGR order rather than RGB
19 (B, G, R) = image[100, 50]
20 print("R={}, G={}, B={}".format(R, G, B))
如前所⽰,我们的图像尺⼨为 宽度= 600 ,⾼度= 322 ,深度= 3 。我们可以通过指定坐标来访问数组中的各个像素值,只要它们在最⼤
宽度和⾼度之内即可。
编码, 图像[ 100 ,50 ] ,从位于的像素产⽣3元组的BGR值 x = 50 和 y = 100 (同样,记住的⾼度是多少⾏和宽度是多少列 -现在进
⾏第⼆次说服⾃⼰这是真的)。如上所述,OpenCV以BGR顺序存储图像(例如,不同于Matplotlib)。看看提取第19⾏上像素的颜⾊通
道值有多么简单 。
最终像素值显⽰在此处的终端上:
R=41, G=49, B=37
3. 数组切⽚和裁剪
提取“感兴趣区域”(ROI)是图像处理的⼀项重要技能。
举例来说,您正在识别电影中的⼈脸。⾸先,您将运⾏⼈脸检测算法以查找正在使⽤的所有帧中⼈脸的坐标。然后,您需要提取⾯部ROI,
然后保存它们或对其进⾏处理。
现在,让我们⼿动提取ROI。这可以通过数组切⽚来实现。
22 # extract a 100x100 pixel square ROI (Region of Interest) from the
23 # input image starting at x=320,y=60 at ending at x=420,y=160
24 roi = image[60:160, 320:420]
25 cv2.imshow("ROI", roi)
26 cv2.waitKey(0)
数组切⽚在 第24⾏ ,格式为: 图⽚[ startY:endY,startX:endX ] 。 然后在第25⾏显⽰ 。就像上次⼀样,我们显⽰直到按下某个
键(第26⾏)。
4. 调整图像⼤⼩
调整图像⼤⼩很重要,原因有很多。⾸先,您可能需要调整⼤图像的⼤⼩以适合屏幕。在较⼩的图像上,图像处理也更快,因为要处理的像
素更少。在深度学习的情况下,我们经常忽略宽⾼⽐来调整图像的⼤⼩,以使体积适合⽹络,这要求图像是正⽅形且具有⼀定尺⼨。
剩余15页未读,继续阅读
资源评论
是空空呀
- 粉丝: 168
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功