是否有任何功能或算法可以从图像中删除点和小/短线。我为机器人制作了一张度量地图。我已经使用算法从图像中制作骨架。我需要的是,删除小/短线并指向平滑线 - 参见图片。我是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;
}