【发布时间】:2019-06-22 12:04:52
【问题描述】:
我有一个装满图像的文件夹,我想找到出现次数最少的色相值。为此,我为所有色调值创建了一个长度为 360 的数组,取出我文件夹中的所有图像,遍历它,对于每个像素,我在数组中的索引处添加 +1,表示色调值。例如,如果我的像素中有色调值 0,我会在我的数组中的索引 0 处添加 +1。 我的问题是:有没有更快或更有效的方法来做到这一点?
这是我的代码:
path = 'path'
sub_path = 'sub_path'
sumHueOcc = np.zeros((360, 1), dtype=np.uint64)
for item in dirs:
fullpath = os.path.join(path,item)
pathos = os.path.join(sub_path,item)
if os.path.isfile(fullpath):
f, e = os.path.splitext(pathos)
img = np.array(Image.open(fullpath))
img = np.float32(img)
imgHSV = cv2.cvtColor(img, cv2.COLOR_RGB2HSV_FULL) #RGB because numpy RGB
# want to work with hue only
h, s, v = cv2.split(imgHSV)
# the hue values in one large array
Z = np.array(h, copy=True)
Z = Z.reshape((-1, 1))
# convert to np.float32
Z = np.uint64(Z)
# count each appearence from hue values
for z in Z:
sumHueOcc[z] = sumHueOcc[z] + 1
max = np.argmax(sumHueOcc)
min = np.argmin(sumHueOcc)
print("Minimum 1")
print(min)
sumHueOcc[min] += max
min = np.argmin(sumHueOcc)
print("Minimum 2")
print(min)
sumHueOcc[min] += max
min = np.argmin(sumHueOcc)
print("Minimum 3")
print(min)
sumHueOcc[min] += max
min = np.argmin(sumHueOcc)
print("Minimum 4")
print(min)
【问题讨论】:
-
仅供参考,在 OpenCV 中,uint8 图像的 H 值在 (0, 180) 中
-
所以基本上你想要一个histogram 的数据?
-
@Miki 是的,我知道。我不小心复制了 Half Hue 的代码。现在我的代码是正确的。
-
@ThomasKühn 是和否。我已经有一个直方图。这是我的另一个问题。但我想要出现次数最少的值。我可以从直方图中得到吗?
标签: python-3.x image numpy opencv image-processing