画像からポイントと小さい/短い線を削除する関数またはアルゴリズムはありますか? ロボットのメトリック マップを作成しました。アルゴリズムを使用して、画像からスケルトンを作成しました。私が必要とするのは、小さい/短い線を削除し、ポイントして滑らかな線を取得することです-写真を参照してください。私は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;
}