【发布时间】:2017-01-19 19:56:46
【问题描述】:
有没有办法在 OpenCV (>=2) 中转换图像 不必知道它们的源类型?我意识到有 cvtColor,但是你必须指定转换代码,这总是需要我创建一个相应的开关块,这真的很乏味。如果没有像这样常见的东西的辅助函数,我会感到惊讶。
谢谢
【问题讨论】:
-
如何在不知道 A,B 是什么的情况下将 A 转换为 B?你到底想达到什么目的?
-
如何创建开关块?通常你要么知道输入类型(然后你可以创建一个开关块),要么你不知道(那么即使是开关块也不可能)
-
我正在构建一个用于处理相机数据的通用类,它应该使用不同的输入进行操作,例如 RGB 或灰度,16 位或 8 位。例如,如果我需要灰度数据(因为许多 OpenCV 函数只在 8 位单通道数据上运行),我必须根据通道数来决定,要么调用 cvtColor,要么只复制数据,以防它已经处于灰度状态。然后,我还必须仔细检查它是否已经是 8 位并且可能再次转换。这是我经常偶然发现的事情,手动处理每个案例很乏味。
-
您可以创建一个函数来封装
switch,它接受两个参数:源色彩空间和目标色彩空间并返回正确的代码(如果支持)。对于额外的功劳,您也可以传递源图像以验证#channels 对应于提供的颜色空间。 -
是的,感谢您指出这一点,我通常会这样做。事情在我遇到的每个新项目中都必须重新编码,或者从旧代码中获取并复制/粘贴。我想也许我缺少一个便利功能。但是你的回答当然是对的,这样做所需的数据并不存在。