首页 > 代码库 > python_Opencv_图像的基础操作
python_Opencv_图像的基础操作
目标
- 获取像素值并修改
- 获取图像的属性(信息)
- 图像的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 px13 14 # 第三个参数0,1,2分别代表B,G,R15 blue=img[100,100,0]16 green=img[100,100,1]17 red=img[100,100,2]18 19 print blue20 print green21 print red22 23 # 打印结果:24 # [143 152 161]25 # 14326 # 15227 # 16128 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 # 10842 # 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.size13 ## 58982414 15 # 图像的数据类型16 print img.dtype17 ## 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()
结果:图中的球的部分整体复制一块到其他位置
图像通道的拆分及合并
未完成,待续。。。。。
python_Opencv_图像的基础操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。