Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么要转换为灰度opencv?_Opencv - Fatal编程技术网

为什么要转换为灰度opencv?

为什么要转换为灰度opencv?,opencv,Opencv,我在opencv中做一些基本的人脸检测,我看到的每个示例代码都会转换成灰度,然后在灰度上执行人脸检测 起初,我认为这是出于性能方面的原因,但我做了一个比较,发现没有显著的性能提升 此代码: faceCascade.detectMultiScale(*image, *faces, 1.1, 3, CASCADE_SCALE_IMAGE, Size(60,60)); 执行与此代码大致相同的操作: Mat gray; cvtColor(*image, gray, COLOR_BGR2GRAY); f

我在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中转换为灰度


谢谢

每个人都转换为灰度,因为许多函数都需要灰度。从
faceCascade.detectMultiScale()
还需要灰度:

cascade分类器::检测多尺度(常数矩阵和图像…)

图像–CV_8U类型的矩阵,包含检测到对象的图像

CV_8U
是单通道图像,而
CV_8U3
则是三通道图像

编辑:如果在传递到该方法之前不将其转换为灰度,OpenCV将在引擎盖下为您执行此操作。

简而言之:

这是需要的,但如果你不这样做,那么OpenCv会为你做

如果你传递的是Mat——你传递的是CV_8U(频道)信息——他们可以帮你做。。这很聪明

为什么开发人员要编写三行代码,而您可以轻松地让他们编写一行

尽管如此,谢谢你的回答和挖掘

其他开发人员的一些注意事项:

cvtColor在RPI3上大约需要3毫秒才能将640x480 BGR转换为灰度


如果您正在使用多个需要灰度的openCv方法,那么如果您将灰度转换一次,并将灰度传递到这些openCv方法中,您可以获得更好的性能。

那么为什么detectMultiScale即使在我给它BGR时仍然有效?您给它一个指针。你试过用图像而不是指针来输入它吗?你发给我的文件上也写着CV_8U而不是CV_8u3实际上我做了更多的挖掘。在这里,您可以找到后续问题的答案: