1


画像からポイントと小さい/短い線を削除する関数またはアルゴリズムはありますか? ロボットのメトリック マップを作成しました。アルゴリズムを使用して、画像からスケルトンを作成しました。私が必要とするのは、小さい/短い線を削除し、ポイントして滑らかな線を取得することです-写真を参照してください。私はopencvが初めてなので、単純な問題かもしれません。

なにか提案を?ありがとう。

スケルトンを作成するには、このコードを使用します

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "highgui.h"
#include <stdlib.h>
#include <stdio.h>

using namespace cv;

int main( int argc, char** argv )
{

cv::Mat img = cv::imread("test4.png", 0);

cv::Mat skel(img.size(), CV_8UC1, cv::Scalar(0));

cv::Mat temp(img.size(), CV_8UC1);

cv::Mat sub_mat = Mat::ones(img.size(), img.type())*255;

cv::Mat eroded;

cv::Mat element = cv::getStructuringElement(cv::MORPH_CROSS, 

cv::Size(3, 3));

cv::subtract(sub_mat, img, img);


bool done;      
do
{
  cv::erode(img, eroded, element);
  cv::dilate(eroded, temp, element); // temp = open(img)
  cv::subtract(img, temp, temp);
  cv::bitwise_or(skel, temp, skel);
  eroded.copyTo(img);

  done = (cv::countNonZero(img) == 0);
} while (!done);


cv::subtract(sub_mat, skel, skel);

cv:imwrite("skelet.png",skel);

cv::imshow("Skeleton", skel);

cv::waitKey(0);

return 0;
}
4

1 に答える 1