OpenCV Point类数据类型转换成员函数使用问题求助
成功调用OpenCV Point类类型转换函数的经验分享
我之前刚好踩过这个坑,成功调用过Point类的类型转换成员函数,给你梳理下正确的用法和常见误区:
正确的函数是
convertTo,调用方式要注意
这个函数不是返回转换后的Point对象,而是需要你传入一个目标类型的Point变量作为参数,它会把转换结果写入这个变量里。比如从int类型的Point转float类型:#include <opencv2/opencv.hpp> int main() { cv::Point2i p_int(10, 20); // int类型的2D点 cv::Point2f p_float; // 准备接收转换结果的float类型2D点 // 调用convertTo完成类型转换,CV_32F表示目标类型为32位浮点 p_int.convertTo(p_float, CV_32F); // 输出结果:(10.0, 20.0) std::cout << "转换后的点:" << p_float << std::endl; return 0; }别踩“直接拿返回值”的坑
很多人会误以为这个函数会直接返回转换后的Point,比如写auto p_float = p_int.convertTo(CV_32F);,这肯定会报错——因为convertTo的返回值是void,它是通过传入的参数输出结果的。进阶用法:带缩放和偏移的转换
convertTo还支持额外的缩放因子和偏移量,适合转换时需要调整数值的场景,比如:// 转换时把数值缩小一半,再加1.0 p_int.convertTo(p_float, CV_32F, 0.5, 1.0); // 结果会是(6.0, 11.0)维度匹配很重要
要保证源Point和目标Point的维度一致,比如Point2i(2维)不能直接转Point3f(3维),如果需要转不同维度,得手动处理第三个坐标的值。
内容的提问来源于stack exchange,提问作者fermi
相关产品推荐
相关产品推荐

