首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连通分量算法输出

连通分量算法输出
EN

Stack Overflow用户
提问于 2015-10-08 07:41:42
回答 1查看 82关注 0票数 0

目前,我正在实现一种识别图像中连接组件的算法。在执行自适应阈值处理之后,我又创建了另一个名为sub的Mat变量,其中我正在更新它的值,因此包含它们的值允许我使用更新的'newObject‘变量来识别哪些像素连接到哪个像素。

我的预期输出,当我完成这是一个相对连接的图片与不同的强度,它可以看到哪些部分连接到哪。但是,我的问题是,作为子变量的输出只显示一个黑色图像。

我已经通过放置print语句来检查当前值,从而检查了这些值是否实际发生了更改。我还在if语句中放置了不同的print语句,并了解到它们确实进入了我更改子变量中像素值的条件。

我的问题是,为什么当我对子变量执行imshow函数时,输出图像是黑色的。对不起,如果我在某个地方犯了错,我在这方面还是比较新的。

代码语言:javascript
复制
for(int i = 0; i < detected_edges.rows; i++){
        for(int j = 0; j < detected_edges.cols; j++){
            if(detected_edges.at<uchar>(i,j) > 0){
                Point current = (i,j);
                if(i-1 < 0 && j-1 < 0){
                    newObject = newObject + 15;     //no values
                    sub.at<uchar>(current) = newObject;
                    printf("This is the value at this point: %u", sub.at<uchar>(current));
                }else if(i-1 >= 0 && j-1 < 0){
                    Point up = (i-1,j);
                    if(sub.at<uchar>(up) != 0){
                        sub.at<uchar>(current) = sub.at<uchar>(up);                 //only up has value
                    }else{
                        newObject = newObject + 15;                                             //no values
                        sub.at<uchar>(current) = newObject;
                    }
                }else if(i-1 < 0 && j-1 >= 0){
                    Point left = (i,j-1);
                    if(sub.at<uchar>(left) != 0){
                        sub.at<uchar>(current) = sub.at<uchar>(left);               //only left has value
                    }else{
                        newObject = newObject + 15;                                 //no values
                        sub.at<uchar>(current) = newObject;
                    }
                }else{
                    Point up = (i-1,j);
                    Point left = (i,j-1);
                    if(sub.at<uchar>(up) == 0 && sub.at<uchar>(left) == 0){

                        newObject = newObject + 15;                                             //no values
                        sub.at<uchar>(current) = newObject;
                    }else if(sub.at<uchar>(up) == sub.at<uchar>(left)){             //same value
                        sub.at<uchar>(current) = sub.at<uchar>(up);
                    }else if(sub.at<uchar>(up) != sub.at<uchar>(left) && (sub.at<uchar>(up) != 0 && sub.at<uchar>(left) != 0)){
                        sub.at<uchar>(current) = sub.at<uchar>(up);                 //different values follow upper's value
                    }else if((sub.at<uchar>(up) != 0 && sub.at<uchar>(left) == 0)){
                        sub.at<uchar>(current) = sub.at<uchar>(up);                 //only up has value
                    }else if(sub.at<uchar>(up) == 0 && sub.at<uchar>(left) != 0 ){
                        sub.at<uchar>(current) = sub.at<uchar>(left);               //only left has value
                    }
                }
            }
        }
    }

更新:我注意到只有'sub‘Mat变量中的第一行由于某种原因而更改值,即使循环会上升到图像的最后一行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-15 13:12:00

之所以图像是黑色的,是因为我通过创建更多的对象来查看灰度图像(0-255)的值范围。我使用2D数组执行了不同的实现,并对算法进行了实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33009559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档