Почему изображение в градациях серого, преобразованное в cv2, все еще имеет 3 канала? - PullRequest
0 голосов
/ 05 ноября 2018

Я столкнулся с этой загадочной ситуацией, пытаясь избавиться от третьего измерения (измерения RGB) моих изображений, чтобы передать их в классификатор Knn для распознавания лиц.

В качестве примера я взял одно цветное изображение лица из базы данных «Помечено лицо в дикой природе». Это сохраняется локально.

Сначала я импортировал изображение, затем преобразовал его в оттенки серого, затем проверил размер (time1), затем экспортировал с помощью «imwrite», затем снова импортировал изображение в оттенках серого, затем снова проверил его размер (time2).

В (время1) размерность была 2: (250, 250). Однако в (время 2) размерность стала 3: (250, 250, 3). Почему при экспорте и импорте размер изображения в оттенках серого изменяется? Что следует указать при импорте изображения в оттенках серого, чтобы оно оставалось двухмерным?

Вот мой код Python:

import cv2

import matplotlib.pyplot as plt

imgBGR = cv2.imread("path/filename")

gray = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2GRAY)

gray.shape  # this gives me (250, 250)

cv2.imwrite("path/newname", gray)

gray2 = cv2.imread("path/newname")

gray2.shape  # this gives me (250, 250, 3)

1 Ответ

0 голосов
/ 05 ноября 2018

Попробуйте gray2 = cv2.imread("path/newname" , cv2.IMREAD_GRAYSCALE)

Как Opencv imread documentmata , значением по умолчанию является cv2.IMREAD_COLOR, поэтому при установке флага по умолчанию cv2.imread считывает изображение в цвете, поэтому оно разделяет изображение в градациях серого на 3 канала.

По конкретному cv2.imread("path/newname" , cv2.IMREAD_GRAYSCALE) функция будет считывать изображение в оттенках серого.

...