【问题标题】:OpenCV - confusion over bit depth requirements of different functionsOpenCV - 混淆不同功能的位深度要求
【发布时间】:2012-02-12 12:02:05
【问题描述】:

我发现自己在我的 C++ opencv 代码中做了很多 convertTo() 调用。这有点令人困惑,我不确定何时需要转换图像的位深度,直到收到错误消息。

例如,我有一个 Mat 表示一个 16U 的图像。然后我尝试调用 matchTemplate() 并得到一个断言错误,它需要 8U 或 32F。为什么模板匹配不能在 16U 上工作?当我显示图像时也会出现类似的问题(尽管位深度限制在显示图像的情况下更有意义)。我发现自己在摆弄 convertTo() 和缩放因子,试图让图像用 imshow() 正确显示,并希望我能够更优雅地做到这一点(也许我被 matlab 的 imagesc 函数宠坏了)。

我是否遗漏了一些关于 openCV 对位深度使用的期望的基本信息?如何更简洁地处理 opencv 库函数对位深度的要求?

【问题讨论】:

    标签: c++ image image-processing opencv


    【解决方案1】:

    假设您使用的是C interface

    cvMatchTemplate(const CvArr* image, const CvArr* templ, CvArr* result,int method)

    image – 搜索运行的图像;应该是 8 位或 32 位 浮点数

    OpenCv 中的大多数函数将使用 8U(用于灰度图像)或 32F(用于彩色 3 通道图像)。

    【讨论】:

    • 我很困惑 - 我认为通道数与浮点/无符号规范是分开的。例如3 通道 8 位图像应为 CV_8UC3。但是,我的问题不在于调用哪个函数来进行模板匹配,而是更广泛地关注是否有更优雅的方式来处理位深度转换。例如,是否有一种方法可以自动从一个位深度重新调整到另一个位深度,或者标准化到整个范围?许多功能不支持 16U 和其他位深度是否有原因?
    【解决方案2】:

    最常见的图像类型是 8U(彩色和灰色)。这是 OpenCV 的首选格式。
    在功能更具体的基础上支持其他格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-08
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多