目标
- 获取像素值并修改
- 获取图像的属性(信息)
- 图像的ROI()
- 图像通道的拆分及合并
几乎所有以上的操作,与Numpy 的关系都比与OpenCV 的关系更加紧密,因此熟练Numpy 可以帮助我们写出性能更好的代码。
获取像素值并修改
代码:
1 # 2 3 import cv2 4 import numpy as np 5 6 # 首先打开一张图片 7 img=cv2.imread(‘Koala.jpg‘) 8 9 # 在图片中获取一个像素点 10 px=img[100,100] 11 # 打印出像素值,BGR图片显示【B,G,R】值 12 print px 13 14 # 第三个参数0,1,2分别代表B,G,R 15 blue=img[100,100,0] 16 green=img[100,100,1] 17 red=img[100,100,2] 18 19 print blue 20 print green 21 print red 22 23 # 打印结果: 24 # [143 152 161] 25 # 143 26 # 152 27 # 161 28 29 # 类似的方式可以用于修改像素值 30 img[100,100]=[255,255,255] 31 print img[100,100] 32 # 打印结果:[255 255 255] 33 34 # 效率更快的方法,numpy中这些方法经过快速矩阵运算的优化 35 # 显示[10,10]位置的R值 36 print img.item(10,10,2) 37 # 修改它并显示 38 img.itemset((10,10,2),200) 39 print img.item(10,10,2) 40 #打印结果: 41 # 108 42 # 200
注意:
Numpy 是经过优化了的进行快速矩阵运算的软件包。所以我们不推荐逐个获取像素值并修改,这样会很慢,能有矩阵运算就不要用循环。
对于获取每一个像素值,也许使用Numpy 的array.item() 和array.itemset() 会更好。但是返回值是标量。如果你想获得所有B,G,R 的值,
你需要使用array.item() 分割他们。
获取图像的属性(信息)
- 图像的属性包括:行,列,通道,图像数据类型,像素数目等。
- img.shape 可以获取图像的形状。
- 他的返回值是一个包含行数,列数,通道数的元组。
- img.size返回像素点总数
- img.dtype 返回的是图像的数据类型.
看代码:
1 import cv2 2 import numpy as np 3 4 # 首先打开一张图片 5 img=cv2.imread(‘Koala.jpg‘) 6 7 #图像形状 8 print img.shape 9 ## (384L, 512L, 3L) 10 11 # 像素的数量 12 print img.size 13 ## 589824 14 15 # 图像的数据类型 16 print img.dtype 17 ## uint8
图像ROI
- 有时候我们需要对一幅图像的特定区域进行操作。
- 例如我们要检测一副图像中眼睛的位置,我们首先应该在图像中找到脸,再在脸的区域中找眼睛,而不是直接在一幅图像中搜索。
- 这样会提高程序的准确性和性能。ROI 也是使用Numpy 索引来获得的。
参照PDF中的一个例子,直接拿过来:
1 import cv2 2 import numpy as np 3 img=cv2.imread(‘/home/duan/workspace/opencv/images/roi.jpg‘) 4 5 ball=img[280:340,330:390] 6 img[273:333,100:160]=ball 7 8 cv2.imshow(‘image‘,img) 9 cv2.waitKey(0) 10 cv2.destroyAllWindows()
结果:图中的球的部分整体复制一块到其他位置
图像通道的拆分及合并
未完成,待续。。。。。
时间: 2024-10-12 12:16:35