Это потому, что, хотя ваша форма нулей правильная, скорее всего, существует несоответствие типов данных. Numpy Zeros docs имеет тип данных по умолчанию numpy.float64
. Просто передайте параметр dtype
для вашего случая.
color = cv2.imread("lohri.jpg")
b,g,r = cv2.split(color)
zeros = np.zeros(b.shape[0], b.shape[1]], dtype = b.dtype)
#Note that the dtype is most likely np.uint8, and you can use that instead too if you prefer
#zeros = np.zeros([b.shape[0], b.shape[1]], dtype = np.uint8)
#Also note that you can pass shape tuple directly.
#zeros = np.zeros(b.shape, dtype = np.uint8)
# Make other 2 channels as zeros
only_red = cv2.merge((zeros, zeros, r))
РЕДАКТИРОВАТЬ: Вы также можете использовать np.zeros_like
, чтобы создать массив с правильной формой и типом данных, что также делает код более четким и лаконичным. Спасибо Марк!
color = cv2.imread("lohri.jpg")
b,g,r = cv2.split(color)
zeros = np.zeros_like(b)
only_red = cv2.merge((zeros, zeros, r))