OpenCV-混淆了不同函数的位深度要求

OpenCV - confusion over bit depth requirements of different functions

本文关键字:深度 函数 OpenCV-      更新时间:2023-10-16

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

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

我是否遗漏了openCV对比特深度使用的基本期望?如何以更干净的方式处理opencv库函数对位深度的要求?

假设您使用的是C接口:

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

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

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

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