[32/64bit] 画像を極座標または半極座標空間に再マッピングします.
imgproc_warpPolar p1,p2,p3,p4,p5,p6
p1 = sptr : IntPtr src p2 = sptr : IntPtr dst p3 = ARGS_SIZE : Size dsize p4 = ARGS_POINT2F : Point2f center p5 = double : double maxRadius p6 = int : int flags
(プラグイン / モジュール : OpenCvSharpExtern.dll)
Polar remaps reference次の変換を用いて、ソース画像を変換します。\(x - center.x, y - center.y) (phi)(♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪Klin (McDot)(with) & default ¶ Klog ¶ log_e(??? -? ???)(semilog ????????\♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪\♪♪♪♪♪♪♪~Kangle = dsize.height / 2Pi ☆Klin = dsize.width / maxRadius ☆Klog = dsize.width / log_e(maxRadius) ☆end{array} ☆end{array} ☆end{array} ☆end{array}!\Linear vs semilog mappingPolar mappingにはlinearとsemi-logがあります。線形はデフォルトで、セミログマッピングは、人間の「小窩座」と呼ばれる視力を模したもので、周辺部の視力が低いのに対して、視線上の視力が非常に高いという特徴があります。 \dsize.width = ????? ) ????? ) ????? ) ????? ) dsize.height <= 0のみの場合、出力画像の領域は bounding circleの領域に比例しますが、Kx * Kxでスケーリングされます。 \dsize.height = ????? (dmsize.width ?????) ????? (frank)\] dsize>0の場合、出力画像は指定されたサイズになりますので、外接円の面積はdsizeに合わせて拡大されます。リバースマッピング flagsにWARP_INVERSE_MAPを追加することで、リバースマッピングを行うことができます//直接変換 warpPolar(src, lin_polar_img, Size(),center, maxRadius, flags); // linear Polar warpPolar(src, log_polar_img, Size(),center, maxRadius, flags + WARP_POLAR_LOG); // semilog Polar // 逆変換 warpPolar(lin_polar_img, recovered_lin_polar_img, src.size(), center, maxRadius, flags + WARP_INVERSE_MAP); warpPolar(log_polar_img, recovered_log_polar, src.size(), center, maxRadius, flags + WARP_POLAR_LOG + WARP_INVERSE_MAP);fragment追加で,極マップされた座標から元の座標を計算する方法 ?((rho, phi)->(x, y)?):double angleRad, magnitude; double Kangle = dst.rows / CV_2PI; angleRad = phi / Kangle; if (flags & WARP_POLAR_LOG) { double Klog = dst.cols / std::log(maxRadius); magnitude = std::exp(rho / Klog); } else { double Klin = dst.cols / maxRadius; magnitude = rho / Klin; } int x = cvRound(center.x + magnitude * cos(angleRad)); int y = cvRound(center.y + magnitude * sin(angleRad));fragmentNote この関数は,置換して動作させることはできません. 大きさと角度を度単位で計算するために,内部では cartToPolar が利用され,角度は 0 から 360 まで,約 0.3 度の精度で測定されます. この関数はリマップを使用します。alsocv::remapExamples: samples/cpp/polar_transforms.cpp を参照してください。 元関数名(C#): imgproc_warpPolar 元DLLエクスポート名: imgproc_warpPolar 参照元CSファイル: Internal\PInvoke\NativeMethods\imgproc\NativeMethods_imgproc.cs ▼ C言語側関数定義
CVAPI(ExceptionStatus) imgproc_warpPolar( cv::_InputArray *src, cv::_OutputArray *dst, MyCvSize dsize, MyCvPoint2D32f center, double maxRadius, int flags) { BEGIN_WRAP cv::warpPolar(*src, *dst, cpp(dsize), cpp(center), maxRadius, flags); END_WRAP }
プラグイン / モジュール | OpenCvSharpExtern.dll |
バージョン | 1.00 |
作成日 | 2021/11/30 |
著作者 | inovia |
URL | https://hsp.moe/ |
備考 | #include "OpenCvSharpExtern32.as"
#include "OpenCvSharpExtern64.as" 使用するHSPランタイムのビット数に合わせたインクルードファイルを使用すること |
タイプ | OpenCVSharpラッパーDLL |
グループ | NativeMethods_imgproc |
対応環境 |
|
hs ファイル | hsphelp\OpenCvSharpExtern.hs |