Я хотел бы пойти с чем-то вроде этого - это не так сложно, как кажется, есть несколько строк настройки и несколько закомментированных строк DEBUG, чтобы показать мое мышление. Фактический код является однострочным.
Это в основном проверка того, что весь красный канал изображения (im[...,0]
) соответствует всему зеленому каналу (im[...,1]
) и аналогично красный соответствует синему.
#!/usr/bin/env python3
import numpy as np
# Synthesize single channel, grey image of randomness
rangrey = np.random.randint(0,256,(480,640,1), dtype=np.uint8)
# Make RGB equivalent with R=G=B by stacking initial image 3x
ranrgb = np.dstack((rangrey,rangrey,rangrey))
# DEBUG: Check shape
# print(ranrgb,shape) # prints (480, 640, 3)
# DEBUG: Check red channel equals green channel throughout image
# DEBUG print(np.equal(ranrgb[...,0],ranrgb[...,1]).all()) # prints True
# DEBUG: Check red channel equals blue channel throughout image
# DEBUG print(np.equal(ranrgb[...,0],ranrgb[...,2]).all()) # prints True
isGrey = np.equal(ranrgb[...,0],ranrgb[...,1]).all() and np.equal(ranrgb[...,1],ranrgb[...,2]).all()
print(isGrey) # prints True
# Now change one pixel and check
ranrgb[0,0,0] += 1
isGrey = np.equal(ranrgb[...,0],ranrgb[...,1]).all() and np.equal(ranrgb[...,1],ranrgb[...,2]).all()
print(isGrey) # prints False
Если ваше изображение float64
по неизвестной причине, вы должны использовать np.allclose()
вместо np.equal()
.
Обратите внимание, что из-за and
в серединетеста для isGrey
, вторая половина теста может быть закорочена (опущено, чтобы сэкономить половину времени), поскольку, если уже ясно, что красный канал не соответствует зеленому каналу, нет смысла проверять, чтопроисходит в синем канале.