首先看看调用关系:
---cvCvtColor( const CvArr* srcarr, CvArr* dstarr, int code );
------cv::cvtColor(src, dst, code, dst.channels());
----------CvtColorLoop(src, dst, RGB2HSV_f(scn, bidx, (float)hrange));
----------------parallel_for_(Range(0, src.rows), CvtColorLoop_Invoker<Cvt>(src, dst, cvt), src.total()/(double)(1<<16) );
(cvtColor 非常庞大,因为互相转换的格式对是很多的。cvtColor 通过 switch case 语句针对不同的格式之间的转换进行分别处理,在这里没办法一一查看所有的转换,而是只挑一个转换:CV_RGB2HSV 进行查看,通过对一个转换的了解,其它的转换的区别主要是在转换算法部分了。因此可以做到举一反三的效果。)
最后调用的函数:parallel_for_ 是一个并行计算的算法,负责对计算进行并行性调度(具体可以参考:How to use parallel_for? 及