繁体   English   中英

使用 numpy 确定 RGB 图像的某些部分是彩色还是灰度

[英]Determine if certain parts of an RGB image are colored or grayscale using numpy

我正在尝试使用 python、opencv 和 numpy 库来确定 RGB 图像的某些部分是彩色还是灰度。 更具体地说,在 RGB 图像中,我使用神经网络确定人脸位置,当该图像包含打印照片时,我想知道该图像中的人脸位置是灰度还是彩色。

前面提到的任务的示例图片

到目前为止我尝试了什么:

            red_average = np.average(rgb_image_crop[:,:,0])
            green_average = np.average(rgb_image_crop[:,:,1])
            blue_average = np.average(rgb_image_crop[:,:,2])

            highest_distance = max(abs(red_average-green_average), abs(red_average-blue_average), abs(green_average-blue_average))
            if highest_distance> 15:
                print("this crop is colored")
            else:
                print("this crop is grayscale")

在找到人脸的位置后,人脸被裁剪并命名为“rgb_image_crop”。 我基本上使用 numpy 拆分 R、G、B 通道并分别取它们的平均值。 我的逻辑是,与彩色图像相比,灰度图像的 R、G、B 像素值彼此接近,这种方法的性能一般。

但我想知道有没有比这更复杂的方法并有望获得更高的成功? 我查看了其他问题,但每个人都只是想确定图像文件是黑白还是 RGB。

如何找到裁剪图像的每个像素的最大差异,然后获取它们的 STD。 对于灰度图像,与彩色图像相比,该值必须很小。

您可以使用 Numpy 跨第 3 维峰到峰来获得每个像素位置的最小和最大 RGB 值之间的差异。 然后阈值并计算异常值:

RGBrange = np.ptp(im, axis=2) > 10

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM