You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

OpenCV中CV::Point_类末尾带下划线,实例化为何用Point?

为什么OpenCV里CV::Point_带下划线,但实例化可以用Point

这其实是OpenCV里很常见的模板类+类型别名的设计技巧,我来给你拆解清楚:

  • 核心本质:PointPoint_<int>的简化别名
    OpenCV中的Point_是一个模板类,它的定义逻辑大概是这样的:

    template<typename _Tp>
    class Point_ {
        public:
            _Tp x, y;
            // 各种构造函数、运算重载等实现
    };
    

    由于整数类型的坐标点是最常用的场景,OpenCV直接通过typedef给它定义了一个更简洁的别名:

    typedef Point_<int> Point;
    typedef Point_<float> Point2f;
    typedef Point_<double> Point2d;
    

    所以你写Point a(1,2)的时候,本质上就是在实例化Point_<int>这个模板类,只是别名让代码更清爽。

  • 这种设计的好处

    • 模板类Point_保证了通用性:它可以适配int、float、double等多种数据类型,满足不同的开发需求(比如浮点坐标用于图像透视变换,整数坐标用于像素索引)。
    • 类型别名兼顾了易用性:对于最常用的整数点场景,不用每次都写冗长的Point_<int>,直接用Point就能快速定义变量,降低了代码的冗余度。

内容的提问来源于stack exchange,提问作者khiem nguyen trong

火山引擎 最新活动