没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
一、图像的基本操作
1.1 目标
学会:
访问像素值并修改它们
访问图像属性
设置ROI
分割和合并图像
本节中几乎所有的操作都主要与Numpy而不是OpenCV相关。要使用OpenCV编写更好的优化代码,需要对Numpy
有很好的了解。
(示例将在
Python
终端中显示,因为它们中的大多数只是单行代码)
1.2 缩放和修改像素值
下载代码:点击这里
让我们先加载一个彩色图像:
>>> import numpy as np
>>> import cv2 as cv
>>> img = cv.imread('Ronaldo.png')
>>> assert img is not None, "文件无法读取,使用os.path.exists()检查"
可以通过像素的行和列坐标来访问像素值。对于BGR图像,它返回一个蓝色、绿色和红色值的数组。对于灰度图
像,仅返回相应的强度。
>>> px = img[100, 100]
>>> print(px)
[25 26 22]
# 仅访问蓝色像素
>>> blue = img[100, 100, 0]
>>> print(blue)
25
您可以用同样的方法修改像素值。
>>> img[100, 100] = [255, 255, 255]
>>> print(img[100, 100])
[255 255 255]
警告:
Numpy是一个用于快速数组计算的优化库。因此,简单地访问每个像素值并修改它将非常缓慢,并且不鼓励。
注意:
上面的方法通常用于选择数组的一个区域,比如前5行和后3列。对于单个像素访问,Numpy数组方法
array.item()和array.itemset()被认为是更好的。
它们总是返回一个标量,但是,如果你想访问所有的B、G、R值,你需要为每个值分别调用array.item()。
更好的像素访问和编辑方法:
# 访问RED值
>>> img.item(10, 10, 2)
34
# 修改RED值
>>> img.itemset((10, 10, 2), 100)
>>> img.item(10, 10, 2)
100
1.3 图像属性
下载代码:点击这里
加载另一个彩色图像:
>>> import numpy as np
>>> import cv2 as cv
>>> img = cv.imread('Ronaldo2.jpg')
>>> assert img is not None, "文件无法读取,使用os.path.exists()检查"
图像属性包括行数、列数和通道数;图像数据类型;像素数等。
图像的形状通过
img.shape
访问。它返回一个包含行数、列数和通道数的元组(如果图像是彩色的):
>>> print(img.shape)
(423, 634, 3)
注意:
如果图像是灰度的,返回的元组只包含行数和列数,因此这是检查加载的图像是灰度还是彩色的好方法。
img.size
访问的像素总数:
>>> print(img.size)
804546
图像数据类型通过
img.dtype
获取:
>>> print(img.dtype)
uint8
注意:
img.dtype在调试时非常重要,因为OpenCV-Python代码中的大量错误都是由无效的数据类型引起的。
1.4 图像和ROI
下载代码:点击这里
有时,您需要对图像的某些区域进行检测。在图像中检测眼睛时,首先要对整个图像进行人脸检测。获得人脸后,
我们只选择人脸区域,然后在该区域内搜索眼睛,而不是搜索整个图像。
它提高了准确性,因为眼睛总是在脸上
😄
和性能(因为我们在一个小区域内搜索)。
ROI再次使用Numpy索引获得。在这里,我选择了Ronaldo的膝盖部分,并将其复制到图像中的另一个区域:
>>> ball = img[298:354, 366:418]
>>> img[148:360, 216:424] = ball
查看如下结果:
1.5 分割和合并图像通道
有时您需要分别处理图像的B、G、R通道。在这种情况下,您需要将BGR图像拆分为单个通道。在其他情况下,您
可能需要连接这些单独的通道以创建BGR映像。您可以通过以下方式简单地做到这一点:
剩余12页未读,继续阅读
资源评论
ssst、
- 粉丝: 374
- 资源: 42
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功