你肯定写过这行代码:
cv::VideoCapturecap(0);一行搞定,摄像头就打开了。但你有没有好奇过,这一行背后到底跑了多少逻辑?
我把OpenCV 4的modules/videoio/src/目录翻了个底朝天——videoio_registry.cpp、cap.cpp、cap_ffmpeg_impl.hpp、cap_v4l.cpp、cap_gstreamer.cpp、cap_avfoundation.mm、cap_msmf.cpp……光FFmpeg那个实现就3700多行,V4L2有2200行,GStreamer有3100行,加起来超过15000行,就为了把一帧画面从摄像头搬到你的cv::Mat里。
这篇文章带你把这15000行代码的架构理清楚。不光看代码怎么写的,还要搞清楚每一层为什么<