OpenCV中CV::Point_类末尾带下划线,实例化为何用Point?
为什么OpenCV里
CV::Point_带下划线,但实例化可以用Point? 这其实是OpenCV里很常见的模板类+类型别名的设计技巧,我来给你拆解清楚:
核心本质:
Point是Point_<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




