传统for循环对于大量图片访问较慢。如何使用np.where()来访问像素 并操作呢?
实例:读一个灰度图,得到所有满足条件(灰度=10)像素点坐标,并存放到列表
看图大小,做实验的图是320*640,特征点是5个10*10左右的像素,用时450ms左右
图和上面的实验是一张图,耗时22ms。众所周知python的for循环效率很很低,所以能用np.where就用这个了
表达式
numpy.where(condition, x, y)Return elements chosen from x or y depending on condition. 只需要把条件传递给它,它就会返回一个使得条件为真的元素的元组。 注:当只个一个参数时,np.where(condition)是np.asarray(condition).nonzero()的简写
一维,三个参数 a = np.arange(10) b=np.where(a < 5, a, 10*a) #b的值 array([ 0, 1, 2, 3, 4, 50, 60, 70, 80, 90])解释:条件是a<5,当满足的时候执行x,不满足执行y
二维,一个参数,也就是我上面遍历像素用的方法 a=np.arange(0,100) b= a.reshape(4,25) c=np.where(b%25==0) print(c) d=list(c)[0] print(d)输出
(array([0, 1, 2, 3], dtype=int64), array([0, 0, 0, 0], dtype=int64)) [0 1 2 3]解释:输出的这个元组c是什么意思呢,元组第一个元素是0,1,2,3,也就是行,第二组元素是0,0,0,0是列,比如上面的np.where(b%25==0)就是要得到可以整除25的值,返回坐标,数组b里面满足条件的刚好是每行的第0列