openCV之对图像的基本操作

本节中几乎所有的操作都主要与 Numpy 相关,而不是 OpenCV。需要对Numpy有很好的了解才能使用OpenCV编写更好的优化代码。

访问像素值并对其进行修改

加载图像,cv.imread

import numpy as np
import cv2 as cv
img = cv.imread('messi5.jpg')

您可以通过像素值的行坐标和列坐标来访问像素值。对于 BGR 图像,它返回蓝色、绿色、红色值的数组。对于灰度图像,仅返回相应的强度。

px = img[100,100]
print( px )
#[157 166 200]
# accessing only blue pixel
blue = img[100,100,0]
print( blue )
#157

您可以以相同的方式修改像素值

img[100,100] = [255,255,255]
print( img[100,100] )
#[255 255 255]

上述方法通常用于选择数组的区域,例如前 5 行和后 3 列。对于单个像素访问,Numpy 数组方法、array.item() 和 array.itemset() 被认为更好。但是,它们总是返回一个标量,因此如果要访问所有 B,G,R 值,则需要为每个值单独调用 array.item()。

更好的像素访问和编辑方法:

img.item(10,10,2)
#59
# modifying RED value
img.itemset((10,10,2),100)
img.item(10,10,2)
#100

访问图像属性

图像属性包括行数、列数和通道数;图像数据类型;像素数;等。

图像的形状由 (shape) 访问。它返回行数、列数和通道数的元组(如果图像是彩色的):

print( img.shape )

如果图像是灰度的,则返回的元组仅包含行数和列数,因此该方法是检查加载的图像是灰度还是彩色的好方法。

返回图片的像素块个数,(size)

print( img.size )

图像数据类型(dtype),在Python中,uint8类型是一个无符号8位整数类型,用于表示0到255之间的整数值。它是最常用的数据类型之一,可以在众多应用场景中使用,如图像处理、音频处理、机器学习等领域。Python中的uint8类型是基于NumPy库的并且支持向量化操作。因此,它允许我们在数组、矩阵等结构中快速地执行计算和操作。

print( img.dtype )

img.dtype 在调试时非常重要,因为 OpenCV-Python 代码中的大量错误是由无效数据类型引起的。

设置ROI(投资汇报率)

有时,您将不得不使用图像的某些区域。对于图像中的眼睛检测,首先对整个图像进行人脸检测。当获得人脸时,我们单独选择人脸区域并搜索其中的眼睛,而不是搜索整个图像。它提高了准确性(因为眼睛总是长在脸上)和性能(因为我们在小区域内搜索)。

ROI依然使用Numpy索引获得。在这里,我选择球并将其复制到图像中的另一个区域:

ball = img[280:340, 330:390]
img[273:333, 100:160] = ball

拆分和合并图像

有时您需要在图像的 B、G、R 通道上单独工作。这时,您需要将 BGR 图像拆分(split)为单个通道。在其他情况下,您可能需要加入(merge)这些单独的通道才能创建 BGR 映像。您可以通过以下方式简单地执行此操作:

b,g,r=cv.split(img)
cv.imshow("B", b) 
cv.imshow("G", g) 
cv.imshow("R", r) 
img=cv.merge([b,g,r])

为图像制作边框(填充)

如果你想在图像周围创建一个边框,比如相框,你可以使用 cv.copyMakeBorder()。但它在卷积操作、零填充等方面有更多的应用。此函数采用以下参数:

  • SRC - 输入图像
  • topbottomleftright - 相应方向上像素数的边框宽度
  • borderType - 定义要添加的边框类型的标志。它可以是以下类型:
  • value - 边框类型为cv.BORDER_CONSTANT时边框的颜色

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值