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