我发现自己在C ++ opencv代码中进行了很多convertTo()调用。这有点令人困惑,我不确定何时需要转换图像的位深度,直到收到错误消息。
例如,我有一个代表16U图像的Mat。然后我尝试调用matchTemplate()并得到一个断言错误,它需要8U或32F。为什么模板匹配不能在16U工作?我也在显示图像时出现类似的问题(尽管在显示图像的情况下位深度限制更有意义)。我发现自己摆弄了convertTo()和缩放因子,并尝试使用imshow()来正确显示图像,并希望我能够更优雅地做到这一点(也许我被matlab的imagesc函数所破坏)。
我是否遗漏了一些关于openCV对比特深度使用的期望的基本信息?如何以更清洁的方式处理opencv库函数对位深度的要求?
答案 0 :(得分:0)
假设您使用的是C interface:
cvMatchTemplate(const CvArr* image, const CvArr* templ, CvArr* result,int method)
image - 搜索正在运行的图像;应该是8位或32位 浮点
OpenCv中的大多数功能都将使用8U(对于灰度图像)或32F(对于彩色3通道图像)。
答案 1 :(得分:0)
最常见的图像类型是8U(颜色和灰色)。这是OpenCV的首选格式 其他格式在更多功能的基础上得到支持。