全国服务热线:

15861139266

opencv用来解迷宫,苏州上位机培训,苏州机器视觉培训,苏州工业机器人培训
发布时间:2024-04-25 13:35:16 点击次数:143

该脚本仅适用于完美迷宫,即只有一个唯一解、没有分段、没有圆形区域和没有开放区域的迷宫。

这些完美的迷宫可以使用在线迷宫生成工具生成。

让我们以这个简单的迷宫作为测试图像:

解决完美迷宫的步骤是:


1. 加载源图像。

2. 将给定图像转换为二值图像。

3.提取轮廓

4 进行像素膨胀和腐蚀路径。

5.从膨胀图像中减去腐蚀图像得到最终输出即迷宫的解。


//Opencv C++ Program to solve mazes using mathematical morphology

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <cmath>

#include <iostream>


using namespace cv;

using namespace std;


int main()

{

    Mat src = imread("C:\\Users\\arjun\\Desktop\\opencv-maze-generator.png");

    if (!src.data) { printf("Error loading src \n"); return -1; }


    //Convert the given image into Binary Image

    Mat bw;

    cvtColor(src, bw, CV_BGR2GRAY);

    threshold(bw, bw, 10, 255, CV_THRESH_BINARY_INV);


    //Detect Contours in an Image

    vector<std::vector<cv::Point> > contours;

    findContours(bw, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);


    if (contours.size() != 2)

    {

        // "Perfect maze" should have 2 walls

        std::cout << "This is not a 'perfect maze' with just 2 walls!" << std::endl;

        return -1;

    }


    Mat path = Mat::zeros(src.size(), CV_8UC1);

    drawContours(path, contours, 0, CV_RGB(255, 255, 255), CV_FILLED);


    //Dilate the Image

    Mat kernel = Mat::ones(21, 21, CV_8UC1);

    dilate(path, path, kernel);


    //Erode the Image

    Mat path_erode;

    erode(path, path_erode, kernel);


    //Subtract Eroded Image from the Dilate One

    absdiff(path, path_erode, path);


    //Draw the Path by Red Color

    vector<Mat> channels;

    split(src, channels);

    channels[0] &= ~path;

    channels[1] &= ~path;

    channels[2] |= path;


    Mat dst;

    merge(channels, dst);

    imshow("solution", dst);

    waitKey(0);


    return 0;

}



1.输入:

image.png

2.将给定的图像转换为二进制后:

image.png

3.检测轮廓后:

image.png

4. 膨胀后:

image.png

5. 应用侵蚀后:

image.png

6.从腐蚀中减去膨胀图像后:

image.png

7. 用红色追踪路径(最终输出):

image.png


立即咨询
  • 品质服务

    服务贴心周到

  • 快速响应

    全天24小时随时沟通

  • 专业服务

    授权率高,保密性强

  • 完善售后服务

    快速响应需求,及时性服务

直播课程
软件开发基础课程
上位机软件开发课
机器视觉软件开发课
专题课
联系方式
电话:15861139266
邮箱:75607082@qq.com
地址:苏州吴中区木渎镇尧峰路69号
关注我们

版权所有:江苏和讯自动化设备有限公司所有 备案号:苏ICP备2022010314号-1

技术支持: 易动力网络