我在 opencv 中做一些基本的人脸检测,我看到的每个示例代码都转换为灰度,然后在灰度上执行人脸检测...
一开始我以为是性能方面的原因,但是我做了一个对比,并没有发现明显的性能提升。
这段代码:
faceCascade.detectMultiScale(*image, *faces, 1.1, 3, CASCADE_SCALE_IMAGE, Size(60,60));
执行与此代码大致相同:
Mat gray;
cvtColor(*image, gray, COLOR_BGR2GRAY);
faceCascade.detectMultiScale(gray, *faces, 1.1, 3, CASCADE_SCALE_IMAGE, Size(60,60));
那么这就引出了一个问题,为什么大家都在opencv中转成灰度呢?
谢谢
最佳答案
每个人都转换为灰度,因为许多功能都需要灰度。来自 OpenCV documentation faceCascade.detectMultiScale()
还需要灰度:
CascadeClassifier::detectMultiScale(const Mat& image,...)
image – CV_8U 类型的矩阵,包含检测到对象的图像。
CV_8U
是 1 channel 图像,与 CV_8U3
相反,后者是 3 channel 图像。
编辑:如果您在传递给方法之前不将其转换为灰度图,OpenCV 会在后台为您完成。
关于opencv - 为什么转换为灰度opencv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42867928/