首页 > 代码库 > 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
View Code

 

  注意:

    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
View Code

 

图像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()
View Code

结果:图中的球的部分整体复制一块到其他位置

技术分享

 

图像通道的拆分及合并


 

未完成,待续。。。。。

  

 

python_Opencv_图像的基础操作