OpenCV学习笔记3基础:图像基本操作
Posted xietx1995
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV学习笔记3基础:图像基本操作相关的知识,希望对你有一定的参考价值。
我们来熟悉一下 OpenCV 中对图像的基本操作,本文包括以下几个方面:
- 访问像素值并修改
- 获取宽、高、通道数、像素总数
- 获取ROI
- 拆分和合并通道
- 改变颜色空间
1. 访问像素值并修改
直接看例子:
import cv2
img = cv2.imread('images/test.jpg')
print(img[200, 200]) # [ 29 130 108]
img[200, 200] = [255, 255, 255]
img[200, 201] = [255, 255, 255]
img[201, 200] = [255, 255, 255]
img[201, 201] = [255, 255, 255]
cv2.imshow('test', img)
cv2.waitKey(0)
我们获取了位置(200,200)处的像素值,BGR 分别是 29,130,108,接着修改了四个像素值为白色(255,255,255),结果如下:
2. 获取宽、高、通道数、像素总数
import cv2
# read image
img = cv2.imread('images/test.jpg', 1)
# height, width, number of channels in image
height = img.shape[0]
width = img.shape[1]
channels = img.shape[2]
print('Image Dimension : ', img.shape)
print('Image Height : ', height)
print('Image Width : ', width)
print('Number of Channels : ', channels)
print('Image Size :', img.size)
输出:
Image Dimension : (276, 276, 3)
Image Height : 276
Image Width : 276
Number of Channels : 3
Image Size : 228528
shape
成员保存了图像的形状信息(宽、高、通道数),size
成员保存了图像的总的像素个数(宽 x 高 x 通道数)。
OpenCV Python 中图像采用 numpy.ndarry 对象存储,你也可以获取其他的一些属性。
3. 获取ROI
ROI(Region Of Interest)即感兴趣的区域。获取狗狗的脑袋:
import cv2
# read image
img = cv2.imread('images/test.jpg')
# roi
roi = img[56:176, 65:200, :]
cv2.imshow('ROI', roi)
cv2.waitKey(0)
当然后面我们可以用目标检测自动地找出狗狗的脑袋。
4. 拆分和合并通道
可以使用 split
和 merge
函数来拆分、合并通道:
import cv2
img = cv2.imread('images/test.jpg')
b, g, r = cv2.split(img)
print(b.shape)
print(b.size)
print(type(b))
img2 = cv2.merge([b, g, r])
print(img2.shape)
print(img2.size)
print(type(img2))
输出:
(276, 276)
76176
<class 'numpy.ndarray'>
(276, 276, 3)
228528
<class 'numpy.ndarray'>
可以看到单个通道的像素数是完整图像的三分之一。split
和 merge
函数比较耗时,可以使用 numpy 的索引来操作:
import numpy as np
import cv2
img = cv2.imread('images/test.jpg')
b = img[:, :, 0] # blue channel
g = img[:, :, 1] # green channel
r = img[:, :, 2] # red channel
img3 = np.dstack([b, g, r]) # stack arrays in sequence depth wise (along third axis).
cv2.imshow('merge', img3)
cv2.waitKey(0)
numpy.dstack 用于将输入的数组按深度方向(第 3 维)堆叠起来(dstack 的 d 代表 depth)。
5. 改变颜色空间
可以改变图像的颜色空间:
import cv2
img = cv2.imread('images/test.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('BGR to GRAY', img_gray)
cv2.waitKey(0)
更多颜色空间可以参考:ColorConversionCodes
References
QQ交流群:点击链接加入群聊【Python练习生】532232743
我的知乎:AXin啊
公众号:请叫我AXin
以上是关于OpenCV学习笔记3基础:图像基本操作的主要内容,如果未能解决你的问题,请参考以下文章