OpenCV(cv::logPolar()、cv::Point2f())
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
是一个简单但常用的结构体,用于表示二维空间中的点,适用于各种几何操作和坐标表示。
分类:
图像算法 / OpenCV
标签:
图像算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!