Python 纯白对颜色直方图的影响
我正在尝试使用KNN方法根据人脸照片将人们分为不同的种族。我有一个纯白色背景上的人脸数据集[255,255,255] 作为提要输入,我使用颜色直方图的值。我被告知应该从直方图中删除背景色,以提高KNN的性能 问题:当我从照片中创建一个忽略背景的遮罩时,直方图一点也不会改变 问:我不太喜欢颜色理论,纯白颜色对颜色直方图的形状有影响吗?当我使用仅居中的常规遮罩(如下图所示)时,直方图会发生变化 这是我根据图片构建的遮罩,忽略背景 测试掩模应用正确性的简易掩模 用于直方图计数的源图像 这是我从没有任何遮罩的图片和忽略白色的构建遮罩中得到的直方图 这是我用简单的遮罩裁剪图片得到的直方图。直方图发生变化,因此我认为我计算直方图的方法是正确的 计算直方图的代码:Python 纯白对颜色直方图的影响,python,opencv,image-processing,colors,histogram,Python,Opencv,Image Processing,Colors,Histogram,我正在尝试使用KNN方法根据人脸照片将人们分为不同的种族。我有一个纯白色背景上的人脸数据集[255,255,255] 作为提要输入,我使用颜色直方图的值。我被告知应该从直方图中删除背景色,以提高KNN的性能 问题:当我从照片中创建一个忽略背景的遮罩时,直方图一点也不会改变 问:我不太喜欢颜色理论,纯白颜色对颜色直方图的形状有影响吗?当我使用仅居中的常规遮罩(如下图所示)时,直方图会发生变化 这是我根据图片构建的遮罩,忽略背景 测试掩模应用正确性的简易掩模 用于直方图计数的源图像 这是我从
# loop over the image channels
for (chan, color) in zip(channels, colors):
# create a histogram for the current channel and
# concatenate the resulting histograms for each channel
hist_full = opencv.calcHist([chan], [0], mask, [bin_amount], [0, bin_amount])
# plot the histogram
plt.plot(hist_full, color=color)
plt.xlim([0, bin_amount])
plt.show()
创建掩码的代码:
mask = np.zeros(image.shape[:2], np.uint8)
# simple mask option
# mask[75:175, 75:175] = 255
# create a mask to ignore white background in the histogram
for row in range(0, len(image)):
for col in range(0, len(image[0])):
if (image[row][col] != np.asarray(prop.background)).all():
try:
mask[row][col] = 255
except IndexError:
print(col)
见:
重要部分:
Python:cv2.calcHist(图像、通道、掩码、histSize、范围[、hist[、累积])→ 历史的
参数:。。。
范围–每个维度中直方图单元边界的dims数组。当直方图是均匀的(uniform=true)时,对于每个维度i,指定第0个直方图bin的下(包括)边界L_0和最后一个直方图bin histSize[i]-1的上(排除)边界U_U{\texttt{histSize}[i]-1}就足够了
尝试更改代码的这一部分
hist_full = opencv.calcHist([chan], [0], mask, [bin_amount], [0, bin_amount])
如下
hist_full = opencv.calcHist([chan], [0], mask, [bin_amount], [0, 256])
您需要指定图片中实值的范围(上限除外)。
最可能的情况是,现在您只计算直方图中的值0-63,而忽略64-255