在此之前,作者需要提醒,本节与开头的图像操作不尽相同,本节的操作主要以numpy模块为主,
由于大多数示例都是单行代码,因此示例将在Python终端中显示 。
1、访问和修改像素值
-
先加载彩色图像
>>> import numpy as np >>> import cv2 as cv >>> img = cv.imread('messi5.jpg')
-
你可以通过行和列坐标来访问像素值。对于 BGR 图像,它返回一个由蓝色、绿色和红色值组成的数组。对于灰度图像,只返回相应的灰度
>>> px = img[100,100] >>> print( px ) # 仅访问红色像素 red = img[0,100,100] print(red)
-
你可以用相同的方式修改像素值
>>> img[100,100] = [255,255,255] >>> print( img[100,100] )
-
更好的像素访问和编辑方法:
注意:对于单个像素访问,Numpy数组方法array.item()和array.itemset())被认为更好,但是它们始终返回标量。如果要访问所有B,
G,R值,则需要分别调用所有的array.item()# 访问 RED 值 >>> img.item(10,10,2) # 修改 RED 值 >>> img.itemset((10,10,2),100) >>> img.item(10,10,2)
2、访问图像属性
图像属性包括:行数,列数和通道数,图像数据类型,像素数 and so on ^_^
-
图像的形状可通过 img.shape 访问,它返回行,列和通道数的元组(若图像是彩色的):
>>> print(img.shape)
注意:注意 如果图像是灰度的,则返回的元组仅包含行数和列数,因此这是检查加载的图像是灰度还是彩色的好方法。
-
像素总数可通过访问 img.size :
print(img.size)
-
图像数据类型通过 img.dtype 获得:
print(img.dtype)
3、图像感兴趣区域ROI
使用Numpy索引获得ROI,我要选择球并将其复制到图像中的另一个区域:
>>> ball = img[280:340, 330:390]
>>> img[273:333, 100:160] = ball
4、拆分和合并图像通道
有时你需要分别处理图像的B,G,R通道。在这种情况下,你需要将BGR图像拆分为单个通道。在其他情况下,你可能需要将这些单独的频道加入BGR图片。你可以通过以下方式简单地做到这一点:
>>> b,g,r = cv.split(img)
>>> img = cv.merge((b,g,r))