1

私の目的は、初期画像から輪郭を抽出することだとします。OpenCV を使用してこの操作を実行しました。

cv::Mat gray, edges;
cv::cvtColor(image, gray, CV_BGRA2GRAY);
cv::Canny(gray, edges, 100, 300, 3);

std::vector<std::vector<cv::Point>> contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(edges, contours, hierarchy, cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE, cv::Point(0, 0));

これで、輪郭がポイントの配列に含まれるようになりました。画像に重ねて輪郭を強調するために、初期画像と同じ寸法の cv::Mat 構造体を再構築したいと考えています。

特に、輪郭をすぐに描くことには興味がありません。以下の操作を行います。

  • 輪郭を抽出する
  • 輪郭を広げる
  • 画像に輪郭を重ねる(エッジのシャープ化と同様)

したがって、輪郭は入力画像と同じサイズの行列でなければなりません。

どうやってやるの?

前もって感謝します。

4

1 に答える 1

1

マトリックスを再構築できます

Mat image_contours_grayscale = Mat::zeros(gray.size(),gray.type());
Scalar color(255);
drawContours( image_contours_grayscale, contours,-1,color,1);

drawContours がグレースケール画像で機能するかどうかはわかりませんが、機能しない場合は、これを試すことができます

Mat image_contours_color = Mat::zeros(image.size(),image.type());
Scalar color(255,255,255);
drawContours( image_contours_color, contours,-1,color,1);
Mat image_contours_grayscale;
cv::cvtColor(image_contours_color, image_contours_grayscale, CV_BGRA2GRAY);

image_contours_grayscale はグレースケール イメージで、すべて黒で輪郭は白です。

これが機能するかどうか教えてください。このソリューションをテストする機会がありませんでした。

于 2013-08-08T13:46:04.067 に答える