首页 > 其他分享 >OpenCV(logPolar()、Point2f())

OpenCV(logPolar()、Point2f())

时间:2024-08-18 16:37:20浏览次数:11  
标签:src Point cv OpenCV logPolar 图像 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 是一个简单但常用的结构体,用于表示二维空间中的点,适用于各种几何操作和坐标表示。

标签:src,Point,cv,OpenCV,logPolar,图像,Point2f
From: https://www.cnblogs.com/keye/p/18365774

相关文章

  • OpenCV(cv::VideoWriter::release())
    目录1.函数定义2.使用示例3.关键点总结cv::VideoWriter::release()是OpenCV中cv::VideoWriter类的一个成员函数,用于释放与视频文件或流相关联的资源。它确保视频写入完成并且释放了用于写入视频的所有内部资源。使用该函数是一个良好的习惯,它可以避免文件被锁定或资源泄......
  • 【全网独家】OpenCV C++ 图像处理实战 :多二维码识别(代码+测试部署)
    介绍在现代社会,二维码无处不在,从支付、物流到用户身份验证,二维码的应用极其广泛。本文将详细介绍如何使用OpenCV在C++环境下实现多二维码识别。我们将涵盖其应用场景、原理解释、算法流程图以及实际代码实现。应用使用场景仓储物流管理:快速扫描多个包裹上的二维码,实现高......
  • OpenCV 高斯模糊
    高斯分布:高斯模糊的原理一:图像产生高斯噪声循环代码实现(耗时)defclamp(pv):#使我们的随机值在0-255之间ifpv>255:return255ifpv<0:return0returnpvimportcv2ascvimportnumpyasnpdefgaussian_noise(image):......
  • OpenCV 模糊操作
    模糊操作三种模糊操作方式均值模糊中值模糊自定义模糊(可以实现上面两种模糊方式)原理:图像处理:基础(模板、卷积运算)图像处理-模板、卷积的整理基于离散卷积定义好每个卷积核不同卷积核得到不同的卷积效果模糊是卷积的一种表象一:均值模糊blurdefblur_demo(imag......
  • OpenCV 图像直方图
    一:直方图的直接使用frommatplotlibimportpyplotaspltdefplot_demo(image):print(image.ravel())plt.hist(image.ravel(),256,[0,256])#ravel将图像3维转一维数组,便于统计频率#统计为256个bin,显示0-256bin,意思是全部显示,我们可以设置只显示一部分plt.show()......
  • OpenCV 边缘保留滤波EPF
    OpenCV经典的两种实现EPF方法:高斯双边和均值迁移一:双边模糊差异越大,越会完整保留defbi_demo(image):dst=cv.bilateralFilter(image,0,100,15)#第二个参数d是distinct,我们若是输入了d,会根据其去算第3或4个参数,我们最好是使用第3或4个参数反算d,先设为0cv......
  • 一个简单的Rtmp推流客户端(QT录音,OpenCV摄像,FFmpeg编码推流)
            RTMP(Real-TimeMessagingProtocol)是一种实时流媒体传输协议,常用于音视频直播。        RTMP推流客户端是一种能够将音视频数据推送到直播服务器的工具。QT录音是利用Qt库实现的录音功能。OpenCV摄像是利用OpenCV库实现的对摄像头的控制和图像处理功......
  • 【OpenCV教程】对图像的各种常用操作
    @目录1.图片读取2.创建窗口3.图片显示4.图片保存5.视频输入输出5.1filename5.2index5.3fourcc5.4apiPreference(notimportant)5.5演示6.通道分离与合并6.1分离API(一)API(二)6.2合并API(一)API(二)7.图片色彩模式转换7.1API7.2转换类型和转换码8.改变图片的对比度和亮度8.1概述8......
  • OpenCV图像处理——轮廓的面积与弧长计算(C++/Python)
    概述轮廓面积与轮廓周长是图像分析中的两项核心统计特征,它们为理解和量化图像中的形状提供了基础。轮廓面积:这代表了轮廓所界定区域的像素数量,是衡量区域大小的直接指标。面积的计算结果以像素平方为单位,为我们提供了一个量化的尺度来比较不同物体的相对大小。轮廓周长......
  • OpenCV图像处理——按最小外接矩形剪切图像
    引言在图像处理过程中,提取感兴趣区域(ROI)并在其上进行处理后,往往需要将处理后的结果映射回原图像。这一步通常涉及以下几个步骤:找到最小外接矩形:使用cv::boundingRect或cv::minAreaRect提取感兴趣区域的最小外接矩形。从原图中提取ROI:根据矩形坐标从原图中剪切出RO......