Skip to content

Instantly share code, notes, and snippets.

@hiroyuki-sato
Created March 21, 2022 14:18
Show Gist options
  • Save hiroyuki-sato/06f4513822c67e19a964cb97769c104a to your computer and use it in GitHub Desktop.
Save hiroyuki-sato/06f4513822c67e19a964cb97769c104a to your computer and use it in GitHub Desktop.
OpenCV glib懸案 3/21
  • OpenCV Image Filtering は様々なフィルタリングが提供されています。関数の中には、デフォルト値が設定されているものがあります。

以下は、デフォルトオプションが指定されている関数の例です。

cv::blur (InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT)
cv::filter2D (InputArray src, OutputArray dst, int ddepth, InputArray kernel, Point anchor=Point(-1,-1), double delta=0, int borderType=BORDER_DEFAULT)
cv::Laplacian (InputArray src, OutputArray dst, int ddepth, int ksize=1, double scale=1, double delta=0, int borderType=BORDER_DEFAULT)
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)
cv::dilate (InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar &borderValue=morphologyDefaultBorderValue())
cv::getDerivKernels (OutputArray kx, OutputArray ky, int dx, int dy, int ksize, bool normalize=false, int ktype=CV_32F)
  • intなど、ポインタを使わないオプションがあります。
  • 同じ名前でもデフォルト値がことなるパラメータがあります boderTypeksize (場合によって同じ変数名で違う型名の場合もあるようです。)
  • define で定義されたオプションが一部使われています。ktype

これらのオプションをまとめて CVImageFilteringOption というクラスを作成しました。このクラスはOpenCV Image Filtering にある関数のデフォルト値を使っているものをピックアップし、それをまとめて一つのクラスにしました。

懸案

  • ktype = 1 , ktype = 3 と同じ名前のオプションでも異なるデフォルト値が使われているものをどうするか?
    • 多いもの優先
    • オプションの名前を変える
  • ktype=CV_32F のような #define CV_32F としているようなオプションはどのようにすべきか?現在は enum 定義
  • enum を指定しておけば数字の代わりに、options.ktype = BORDER_DEFAULT のような指定方法ができるか?何か別途定義が必要か?
  • 現在の実装は以下のように、options 未指定ならOpenCVのデフォルト値を利用。options が指定されたらデフォルトで作成されるパラメータが気に入らない場合は、options.ktype = xx のように指定するとなるがこれで良いか?
GCVImage *gcv_image_bilateral_filter(GCVImage *image,
                                      int d,
                                      double sigma_color,
                                      double sigma_space,
                                      GCVImageFilteringOptions *options,
                                      GError **error)
@kou
Copy link

kou commented Mar 22, 2022

これらのオプションをまとめて CVImageFilteringOption というクラスを作成しました。

GCVImageFilterOptionsがいいと思います!

  • ktype = 1 , ktype = 3 と同じ名前のオプションでも異なるデフォルト値が使われているものをどうするか?

GCVImageFilterOptionsは多いものにしておいて、違うものはGCVImageBlurFilterOptionsとか個別のオプションクラスを作るのはどうですか?この個別のオプションクラスをGCVImageFilterOptionsのサブクラスにすれば違うオプションだけ変更することができます。

  • ktype=CV_32F のような #define CV_32F としているようなオプションはどのようにすべきか?現在は enum 定義

enumにしてください!

  • enum を指定しておけば数字の代わりに、options.ktype = BORDER_DEFAULT のような指定方法ができるか?何か別途定義が必要か?

Cレベルの話ですか?Rubyレベルの話ですか?

Cレベルの話ならenumにすれば名前で指定できるようになります。

Rubyレベルの話なら https://github.com/red-data-tools/opencv-glib/blob/master/opencv-glib/camera-error.h#L7-L19 みたいに定義しておけばoptions.ktype = :border_defaultみたいに書けるようになります。

  • 現在の実装は以下のように、options 未指定ならOpenCVのデフォルト値を利用。options が指定されたらデフォルトで作成されるパラメータが気に入らない場合は、options.ktype = xx のように指定するとなるがこれで良いか?

いいです!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment