如何从python中值为1的二进制图像中获取随机像素索引?

时间:2017-07-01 06:19:03

标签: python random pixel

我有一个大尺寸的二进制图像(2000x2000)。在此图像中,大多数像素值为零,其中一些为1.我需要从图像中仅获得100个随机选择的像素坐标值1。我是python的初学者,所以请回答。

3 个答案:

答案 0 :(得分:2)

我建议制作一个所有非零像素的坐标列表(通过检查图像中的所有像素),然后在列表上使用random.shuffle并获取前100个元素。

答案 1 :(得分:1)

导入必要的库,如

import cv2
import numpy as np  
import pandas as pd  
import matplotlib.pyplot as plt 

gray_img = cv2.imread(img_file, cv2.IMREAD_GRAYSCALE) # grayscale

gray_img[i,j] will give pixel value at (i,j) position

尝试将所有这些值发送到此格式的文件中

i_positition,j_position,value_of_pixel

path = os.getcwd() + '/filename.txt'  
data = pd.read_csv(path, header=None, names=['i', 'j', 'value'])

positive = data[data['value'].isin([1])]  
negative = data[data['value'].isin([0])]

正数据帧包含值为1的所有像素位置。

positive['i'] ,positive['j'] will give you list of (i,j) values of all the pixels whose value is 1.

i_val=np.asarray(positive['i'])

j_val=np.asarray(positive['j'])

现在,您可以随机选择i_val&中的任何值。 j_val数组。

注意:确保您的像素值为1或0.如果您的值为0和255,则更改此命令

positive = data[data['value'].isin([255])] 

答案 2 :(得分:0)

使用以下代码:

import numpy as np
y_idx, x_idx = np.where(image==1)   #list of all the indices with pixel value 1

for i in range(0,100):
    rand_idx = np.random.choice(x_idx)   #randomly choose any element in the x_idx list
    x = x_idx[rand_idx]
    y = y_idx[rand_idx]
    #--further code with x,y--