当前位置:   article > 正文

python OpenCV 图像像素访问 (三)_img.ndim

img.ndim

访问图像像素

  1. #!/usr/bin/env python
  2. # encoding: utf-8
  3. import numpy as np
  4. import cv2
  5. #像素的访问和访问numpy中ndarray的方法完全一样
  6. img[j,i] = 255 # 灰度图访问;j,i 分别表示图像的行和列
  7. #BGR 图像访问
  8. img[j,i,0] = 255 # 0 -- 为通道,指B通道
  9. img[j,i,1] = 255 # 1 -- 为通道,指G通道
  10. img[j,i,2] = 255 # 2 -- 为通道,指R通道

完整示例(给图像加上白色点点):

  1. #!/usr/bin/env python
  2. # encoding: utf-8
  3. import cv2
  4. import numpy as np
  5. def salt(img, n):
  6. for k in range(n):
  7. #img.shape[0] -- 取得img 的列(图片的高)
  8. #img.shape[1] -- 取得img 的行(图片的宽)
  9. i = int(np.random.random() * img.shape[1]);
  10. j = int(np.random.random() * img.shape[0]);
  11. #判断是否为2维数组(即为灰度图像)
  12. if img.ndim == 2:
  13. img[j,i] = 255 #设置值为白点
  14. elif img.ndim == 3: #判断是否为3维数组(即为RGB图像)
  15. img[j,i,0]= 255
  16. img[j,i,1]= 255
  17. img[j,i,2]= 255
  18. return img
  19. if __name__ == '__main__':
  20. img = cv2.imread("mini.jpg")
  21. saltImage = salt(img, 500)
  22. cv2.imshow("Salt", saltImage)
  23. cv2.waitKey(0)
  24. cv2.destroyAllWindows()


几点注意说明:

  1. 与c++ 版的opencv 不同,在Python 中灰度图的 img.ndim = 2 ,而 c++ 中灰度图图像的通道数 img.channel() = 1

  2. 关于使用np.random.random()

      这里使用了 Numpy 的随机数,Python自带也有一个随机数。np.random模块中拥有更多的方法,而Python 自带的random只是一个轻量级的模块。

      要注意的是np.random.seed() 不是线程安全的,而Python 自带的random.seed() 是线程安全的。如果使用随机数时需要用到多线程,建议使用Python

      自带的random() 和 random.seed() ,或者构建一个本地的np.random.Random 类的实例


参考和转载地址:

http://blog.csdn.net/sunny2038/article/details/9080047









声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/782842
推荐阅读
相关标签
  

闽ICP备14008679号