目錄
- 1.
cv::logPolar()
- 函式原型:
- 引數說明:
- 用途和示例:
- 2.
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
是一個簡單但常用的結構體,用於表示二維空間中的點,適用於各種幾何操作和座標表示。