python-3.x - 一组图像中颜色(色调)值(0-359)出现次数的总和

标签 python-3.x image numpy opencv image-processing

我有一个装满图像的文件夹,我想找到出现次数最少的色相值。为此,我为所有色调值创建一个长度为 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)

最佳答案

我们可以使用np.bincount来进行计数。

因此,我们在开始时使用 int64 初始化输出数组 -

sumHueOcc_out = np.zeros((180, 1), dtype=np.int64) 

然后,在循环内部,我们替换涉及循环的最内层部分 -

# 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

使用 bincount 替代方案 -

sumHueOcc_out.flat += np.bincount(h.astype(np.int64).ravel(),minlength=sumHueOcc.size)

关于python-3.x - 一组图像中颜色(色调)值(0-359)出现次数的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54419742/

相关文章:

python - 当我关闭 sublimerepl 选项卡时,如何让 sublimerepl 关闭它创建的 Python 实例?

python - 测试一个大整数的快速方法

python-3.x - Bokeh Legend 对象 - 将指定的颜色传递给图例

javascript - 为什么在 IE8 上的 JavaScript 中访问图像的尺寸如此昂贵?

python - 在python中应用轮廓后如何从图像中提取文本?

python numpy - 通过删除显式 python 循环来优化 chisq 函数?

python - 构建特征时内存不足(将图像转换为派生特征 [numpy 数组])?

python - pygame,无法导入声音

javascript - Node - 从图像缓冲区解析 iptc 数据

python - 如何将数据框中的列中的数据设为 "group"