赞
踩
访问图像像素
- #!/usr/bin/env python
- # encoding: utf-8
-
- import numpy as np
- import cv2
-
- #像素的访问和访问numpy中ndarray的方法完全一样
- img[j,i] = 255 # 灰度图访问;j,i 分别表示图像的行和列
-
- #BGR 图像访问
- img[j,i,0] = 255 # 0 -- 为通道,指B通道
- img[j,i,1] = 255 # 1 -- 为通道,指G通道
- img[j,i,2] = 255 # 2 -- 为通道,指R通道
- #!/usr/bin/env python
- # encoding: utf-8
-
- import cv2
- import numpy as np
-
- def salt(img, n):
- for k in range(n):
- #img.shape[0] -- 取得img 的列(图片的高)
- #img.shape[1] -- 取得img 的行(图片的宽)
- i = int(np.random.random() * img.shape[1]);
- j = int(np.random.random() * img.shape[0]);
-
- #判断是否为2维数组(即为灰度图像)
- if img.ndim == 2:
- img[j,i] = 255 #设置值为白点
-
- elif img.ndim == 3: #判断是否为3维数组(即为RGB图像)
- img[j,i,0]= 255
- img[j,i,1]= 255
- img[j,i,2]= 255
- return img
-
- if __name__ == '__main__':
- img = cv2.imread("mini.jpg")
- saltImage = salt(img, 500)
-
- cv2.imshow("Salt", saltImage)
- cv2.waitKey(0)
- 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。