cvSobelやcvLaplaceなど
- void cv::Sobel( InputArray _src, OutputArray _dst, int ddepth, int dx, int dy, int ksize=3, double scale=1, double delta=0, int borderType=BORDER_DEFAULT );
- void cv::getDerivKernels( OutputArray kx, OutputArray ky, int dx, int dy, int ksize, bool normalize=false, int ktype=CV_32F );
- void cvSobel( const IplImage* src, IplImage* dst, int xorder, int yorder, int aperture_size=3 );
- 解説
- サンプルコード
- 実体ファイル
void cv::Sobel( InputArray _src, OutputArray _dst, int ddepth, int dx, int dy, int ksize=3, double scale=1, double delta=0, int borderType=BORDER_DEFAULT );†
Sobelフィルタを画像にかけてエッジ抽出をする
- _src:cv::Mat型 の入力画像
- _dst:cv::Mat型 の出力画像
- ddepth:出力画像のビット深度。負数を指定すると入力と同じビット深度を意味する。
- dx:x軸方向の微分回数.抽出されるのは縦エッジ
- dy:y軸方向の微分回数.抽出されるのは横エッジ
- ksize:フィルタのサイズ.デフォルト3で省略可
- scale:処理後の画素値を定数倍する係数。デフォルト1で省略可
- delta:処理後の画素値に加算される定数。デフォルト0で省略可
- borderType:画面端での処理を指定するenum型。デフォルトBORDER_DEFAULT (4)で省略可
- OpenCV1.0時代のcvSobel関数に相当する
- 各引数の対応は以下の通り
OpenCV 1.0 (C Interface) | OpenCV 2.4.8 (C++ Interface) |
src | _src |
dst | _dst |
存在しない | ddepth |
xorder | dx |
yorder | yx |
aperture_size | ksize |
存在しない | scale |
存在しない | delta |
存在しない | borderType |
- 指定したパラメータに対応するカーネル(フィルタ)を、getDerivKernelsで生成する
- 生成したカーネルを sepFilter2D で画像に適用する
- Tegra 用の最適化に関して
- Tegra 用の最適化が有効な場合 (HAVE_TEGRA_OPTIMIZATION)
- scaleが1.0
- deltaが0
- ksizeが3の場合
- ksizeか-1の場合
- IPPの最適化に関して
- IPP 用の最適化が有効な場合 (HAVE_IPP)
- dx が 3未満
- dy が 3未満
- src のチャンネル数が1
- borderType が1(BORDER_REPLICATE)
- IPPDeriv関数を使う
画面端での指定enum†
imgproc.hpp内での宣言 | 実際の値 | 対応するIPL互換な定数 |
BORDER_REPLICATE | 1 | IPL_BORDER_REPLICATE |
BORDER_CONSTANT | 0 | IPL_BORDER_CONSTANT |
BORDER_REFLECT | 2 | IPL_BORDER_REFLECT |
BORDER_WRAP | 3 | IPL_BORDER_WRAP |
BORDER_REFLECT_101 | 4 | IPL_BORDER_REFLECT_101 |
BORDER_REFLECT101 | 4 | BORDER_REFLECT_101 |
BORDER_TRANSPARENT | 5 | IPL_BORDER_TRANSPARENT |
BORDER_DEFAULT | 4 | BORDER_REFLECT_101 |
BORDER_ISOLATED | 16 | 無し |
- IPL_BORDER_ 定数群はtypes_c.hで宣言されている
void cv::getDerivKernels( OutputArray kx, OutputArray ky, int dx, int dy, int ksize, bool normalize=false, int ktype=CV_32F );†
TBW
void cvSobel( const IplImage* src, IplImage* dst, int xorder, int yorder, int aperture_size=3 );†
Sobelフィルタを画像にかけてエッジ抽出をする
- src:IplImage*型の入力画像
- dst:IplImage*型の出力画像.抽出されたエッジ成分が入っている.
- xorder:x軸方向の微分回数.抽出されるのは縦エッジ
- yorder:y軸方向の微分回数.抽出されるのは横エッジ
- aperture_size:フィルタのサイズ.デフォルト3で省略可
返り値†
サンプルコード†
実体ファイル†
- OpenCV 2.4.8
- sources/modules/imgproc/include/opencv2/imgproc/imgproc.hpp
- sources/modules/imgproc/src/filter.cpp (sepFilter2D)
- sources/modules/imgproc/src/deriv.cpp (sobel, Scharr, getDerivKernels)
- sources/modules/core/include/opencv2/core/types_c.h (IPL_BORDER_REFLECT_101 など)
- OpenCV 1.0
- cv/include/cv.h
- cv/src/cvderiv.cpp
ジャンル:OpenCV:OpenCV 1.0:OpenCV 2.4準拠