目录
1. cv::logPolar()
cv::logPolar()
是 OpenCV 中用于进行对数极坐标变换(Log-Polar Transformation)的函数。对数极坐标变换将图像的空间坐标转换为极坐标,并对径向分量取对数。这种变换通常用于旋转不变性分析和缩放不变性分析,尤其在图像匹配和物体识别任务中非常有用。
函数原型:
void logPolar(
InputArray src,
OutputArray dst,
Point2f center,
double M,
int flags
);
参数说明:
src
: 输入图像,必须是单通道或多通道的 8 位或浮点图像。dst
: 输出图像,与输入图像有相同的大小和类型。center
: 极坐标变换的中心点,通常是图像的中心(例如:cv::Point2f(src.cols / 2.0, src.rows / 2.0)
)。M
: 缩放系数,通常设定为图像高度或宽度的最大值除以2(M = src.cols / log(src.cols / 2.0)
或M = src.rows / log(src.rows / 2.0)
),以确保图像变换后的内容充满整个输出图像。flags
: 插值标志,可以选择以下选项之一:INTER_LINEAR
:线性插值(默认)INTER_NEAREST
:最邻近插值WARP_FILL_OUTLIERS
:如果输出图像大小不够大,图像边缘会被填充WARP_INVERSE_MAP
:用来进行逆向映射,即从输出图像回到原图像
用途和示例:
cv::logPolar()
通常用于生成尺度和旋转不变的图像表示。下面是一个使用 cv::logPolar()
的简单示例:
#include <opencv2/opencv.hpp>
int main() {
cv::Mat src = cv::imread("example.jpg", cv::IMREAD_GRAYSCALE);
cv::Mat dst;
cv::Point2f center(src.cols / 2.0, src.rows / 2.0);
double M = src.cols / log(src.cols / 2.0);
cv::logPolar(src, dst, center, M, cv::INTER_LINEAR);
cv::imshow("Original Image", src);
cv::imshow("Log-Polar Image", dst);
cv::waitKey(0);
return 0;
}
2. cv::Point2f
cv::Point2f
是 OpenCV 中的一个结构体,用于表示二维点坐标,坐标的类型为浮点数(float
)。该类在图像处理和计算机视觉中非常常用,用于存储图像上的点坐标。
类定义:
template<typename _Tp> class Point_
{
public:
_Tp x, y;
// constructors
Point_();
Point_(_Tp _x, _Tp _y);
Point_(const Point_& pt);
template<typename _Tp2> explicit Point_(const Point_<_Tp2>& pt);
// other member functions
// ...
};
typedef Point_<float> Point2f;
属性:
x
: 点的 x 坐标(横坐标)y
: 点的 y 坐标(纵坐标)
主要构造函数:
Point2f()
:默认构造函数,初始化点为 (0, 0)。Point2f(float _x, float _y)
:构造一个坐标为 (x, y) 的点。Point2f(const Point2f& pt)
:拷贝构造函数。
用途和示例:
cv::Point2f
通常用于表示图像上的特定点,如特征点或轮廓点。以下是一个使用 cv::Point2f
的简单示例:
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
cv::Point2f point1(10.5f, 20.0f);
cv::Point2f point2(30.0f, 40.5f);
// 打印点的坐标
std::cout << "Point 1: (" << point1.x << ", " << point1.y << ")" << std::endl;
std::cout << "Point 2: (" << point2.x << ", " << point2.y << ")" << std::endl;
// 计算两点之间的距离
float distance = cv::norm(point1 - point2);
std::cout << "Distance between points: " << distance << std::endl;
return 0;
}
总结:
cv::logPolar()
用于将图像进行对数极坐标变换,适合图像缩放和旋转不变性分析。cv::Point2f
是一个简单但常用的结构体,用于表示二维空间中的点,适用于各种几何操作和坐标表示。