在opencv中实现骨架化算法的问题 [英] Issues implementing skeletonize algorithm in opencv

查看:393
本文介绍了在opencv中实现骨架化算法的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用opencv实现框架化算法.我想减少下图的像素数量并使它变薄.

I am trying to implement skeletonize alogrithm using opencv. I want to reduce the number of pixels of the below image and make it thin.

这是我要骨架化的图像:

这是我的代码:

Mat image = imread("4X4_b9.png",IMREAD_GRAYSCALE);
    int rows = image.rows;
    int cols = image.cols;
    int size = rows * cols;
    Mat skel = Mat::zeros(image.rows,image.cols,CV_8U);
    threshold(image, image, 100, 255, THRESH_BINARY);
    Mat element = getStructuringElement(MORPH_CROSS, Size(3,3));
    bool done = false;
    while(done == false){
        Mat eroded;
        erode(image, eroded, element);
        Mat temp;
        dilate(eroded, temp, element);
        subtract(image, temp, temp);
        bitwise_or(skel, temp, skel);
        eroded.copyTo(image);

        int zeros = size - countNonZero(image);
        if(zeros == size){
            done = true;
        }
    }

    imshow("skel",skel);
    waitKey(0);
    destroyAllWindows();

注意:我尝试了以下链接以供参考: 已实现python

Note: I tried this link for reference: python implemented

运行后缺少很多行.

以下是输出:

我做错了什么?

推荐答案

img转换为具有白色形状的黑色背景

Convert img to a black background with white color shape

img -> threshold(img, img, 128, 255, THRESHOLD_BINARY_INV);

这篇关于在opencv中实现骨架化算法的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆