我想知道OpenCV中是否有任何功能,它在STL中运行两个cv::Mat对象std::tranform?
例如,
cv::transform(src1, src2, dst, bin_function);
Run Code Online (Sandbox Code Playgroud)
哪里
src1和src2:相同大小的输入矩阵(cv :: Mat).dst :输出矩阵与输入相同.bin_function :二进制函数或函数对象,它接受两个元素作为参数(两个矩阵中的每一个),并返回一些结果值.我试图在文档中搜索但没有找到这样的东西.
据我所知,OpenCV还没有这样的功能.但是,您可以std::transform在cv::Mat迭代器上使用STL算法,如下所示:
std::transform( src1.begin<float>(), src1.end<float>(),
src2.begin<float>(), dest.begin<float>(), bin_function );
Run Code Online (Sandbox Code Playgroud)
请务必使用正确的模板类型参数.因此,如果您有一个3通道矩阵,例如每个通道有8位,那么请使用Vec3b而不是float.
但要注意通常的STL陷阱.src1,src2并且dest在你打电话之前应该有相同数量的元素std::transform.如果你需要这种通用性,你可以考虑自己编写一个包装器函数cv::transform,它会检查它,为内存保留dest.动态查找模板参数的正确类型可能很困难,因为bin_function需要接受所有可能的参数.但是,如果使用带auto参数的C++ 14 lambdas,即使在某些特定情况下也是可能的.
| 归档时间: |
|
| 查看次数: |
1284 次 |
| 最近记录: |