Python 为什么cv2转换的灰度图像仍然有3个通道?

Python 为什么cv2转换的灰度图像仍然有3个通道?,python,cv2,Python,Cv2,我在尝试去除图像的第三维(RGB维)以便将其输入Knn分类器进行人脸识别时遇到了这种令人困惑的情况 我从wild数据库中的标记人脸中选取了一张彩色人脸图像作为示例。它保存在本地 我首先导入图像,然后将其转换为灰度,然后检查尺寸(时间1),然后使用“imwrite”导出,然后再次导入灰度图像,然后再次检查其尺寸(时间2) 在(时间1),维度为2:(250250)。然而,在(时间2),维度变为3:(250,250,3)。为什么导出和导入会改变灰度图片的尺寸?导入灰度图片以保持二维时,我应该指定什么

我在尝试去除图像的第三维(RGB维)以便将其输入Knn分类器进行人脸识别时遇到了这种令人困惑的情况

我从wild数据库中的标记人脸中选取了一张彩色人脸图像作为示例。它保存在本地

我首先导入图像,然后将其转换为灰度,然后检查尺寸(时间1),然后使用“imwrite”导出,然后再次导入灰度图像,然后再次检查其尺寸(时间2)

在(时间1),维度为2:(250250)。然而,在(时间2),维度变为3:(250,250,3)。为什么导出和导入会改变灰度图片的尺寸?导入灰度图片以保持二维时,我应该指定什么

以下是我的python代码:
尝试
gray2=cv2.imread(“路径/新名称”,cv2.imread\u灰度)

由于默认设置为
cv2.IMREAD\u COLOR
,因此通过设置标志,
cv2.IMREAD
的默认设置是读取彩色图像,因此它会将灰度图像分割为3个通道


通过特定的
cv2.imread(“path/newname”,cv2.imread\u GRAYSCALE)
,该函数将以灰度读取图像。

我相信上面可能会回答这一问题。试试这个:
img=cv2.imread('gray.jpg',0)
如果您使用
cv2.imread\u UNCHANGED
而不是
0
,您的代码的未来读者将感谢您。不要走得太远,但是你可以通过这样声明来减少0是一个神奇的变量:
READ\u GRAYSCALE\u ONLY\u FLAG=0
,然后再通过:)^这太过分了。不要编造新的常数;使用已经存在的常量。
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)