0

私はかなり基本的なエッジ検出を行っています。私の実装の一部には、カスタム Image クラスから cv::Mat へのコピーと、Image へのコピーが含まれます。エッジ検出と輪郭の作業 (現在のリストには表示されていません) を行うためのガイドとして、この記事を使用しています。この例では、PerturbedBorderFilter は Image をサブクラス化します。ここに私が持っているものがあります:

void PerturbedBorderFilter::performFilter(const Image& src)
{
  int h = src.Height(), w = src.Width();
  cv::Mat
    orig(h, w, CV_32FC3),
    cannyOutput(h,w,CV_32FC1),
    origGray(h,w,CV_32FC1);

  src.copyTo(orig);

  cv::cvtColor(orig, origGray, CV_RGB2GRAY);
  cv::blur(origGray, origGray, cv::Size(3,3));
  cv::Canny( origGray, cannyOutput, 0.1, 0.2, 3);

  copyFrom(cannyOutput);
}

私はこのランタイムエラーで終わります:

OpenCV Error: Unsupported format or combination of formats () in cvCanny, file /build/buildd/opencv-2.3.1/modules/imgproc/src/canny.cpp, line 67
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/buildd/opencv-2.3.1/modules/imgproc/src/canny.cpp:67: error: (-210)  in function cvCanny

私が知る限り、「origGray」と「cannyOutput」は同じタイプ、深さ、チャンネル数を共有しています。他に何をチェックすればよいかわかりません。

どういうわけか copyTo() と copyFrom() の実装が重要な場合は、それらも提供できます。

いくつかの追加情報:

  1. Class Image のネイティブ カラー スペースは RGB、32 ビット浮動小数点深度、値は [0,1] です。
  2. 現在、copyTo() は画像を上下逆にコピーしますが、それ以外はそのままです。これは無関係だと思っていましたが、役に立つかもしれません...
4

1 に答える 1

5

cv::CannyCV_8U画像深度のみをサポートします。

于 2012-10-28T09:52:20.380 に答える