来源丨https://learnopencv.com/why-does-opencv-use-bgr-color-format/
翻译整理丨OpenCV与AI深度学习
良好设计的要素之一是最小惊讶原则(又称最小意外原则)。一个好的直观设计让用户不会思考。
当你看到门上的把手时,你想拉它。当你看到一扇带有金属板的门时,你想推它。这些是门的使用者的期望,当门的设计者尊重这些期望时,用户可以在不施加任何精神能量的情况下使用门。但如果设计与用户的期望不一致,那么简单的开门动作就会成为一种心理负担。
OpenCV 是一个非常有用的库,但是说到最小意外原则,它就是一场不合格的灾难。当我在 MATLAB 中编写计算机视觉代码时,我很少参考文档。在使用 OpenCV 时,我在浏览器选项卡中永久打开了文档。
OpenCV 的构建似乎考虑到了最大惊喜的原则!这一切都始于默认的 BGR 像素格式。它不适用于使用标准 RGB 像素格式的库。例如,当您在 OpenCV 中使用imread读取图像后尝试使用matplotlib显示图像时,结果看起来很有趣。
“当其他人及其阿姨都使用 RGB 时,为什么不使用 RGB?”
这是我在几个月前的一次会议上遇到 OpenCV 的创始人 Gary Bradski 博士时问他的问题,尽管我忽略了关于每个人和他们的阿姨使用 RGB 的部分。他用另一个问题回答了我的问题。
“为什么美国标准的铁路轨距是 4 英尺 8.5 英寸?”
这个问题的答案当然是“因为罗马马的屁股!”
对于不知道这个不太真实的故事的人,我从snopes复制了以下内容
为什么他们在 OpenCV 中选择 BGR 颜色空间?
OpenCV 的早期开发人员之所以选择 BGR 颜色格式,是因为当时 BGR 颜色格式在相机制造商和软件提供商中很流行。例如在 Windows 中,当使用COLORREF指定颜色值时,它们使用 BGR 格式0x00bbggrr。
BGR 是出于历史原因做出的选择,现在我们必须接受它。换句话说,BGR 是 OpenCV 中的马的屁股。^_^