为什么要转为灰度opencv?

g00*_*ur3 6 opencv

我正在 opencv 中进行一些基本的人脸检测,我看到的每个示例代码都会转换为灰度,然后在灰度上执行人脸检测...

起初我以为这是出于性能原因,但我做了比较,发现性能没有明显提升。

这段代码:

faceCascade.detectMultiScale(*image, *faces, 1.1, 3, CASCADE_SCALE_IMAGE, Size(60,60));
Run Code Online (Sandbox Code Playgroud)

执行效果与此代码大致相同:

Mat gray;
cvtColor(*image, gray, COLOR_BGR2GRAY);
faceCascade.detectMultiScale(gray, *faces, 1.1, 3, CASCADE_SCALE_IMAGE, Size(60,60));
Run Code Online (Sandbox Code Playgroud)

那么这就引出了一个问题,为什么大家都在opencv中转换为灰度呢?

谢谢

m3h*_*h0w 6

每个人都会转换为灰度,因为许多函数都需要灰度。来自OpenCV 文档 faceCascade.detectMultiScale()期望灰度:

\n\n

CascadeClassifier::detectMultiScale(const Mat& image,...)

\n\n

image \xe2\x80\x93 CV_8U 类型的矩阵,包含检测到对象的图像。

\n\n

CV_8U一个 1 通道图像,与CV_8U3, 是 3 通道图像。

\n\n

编辑:如果您在传递给该方法之前没有将其转换为灰度,OpenCV 会在后台为您完成此操作。

\n