kkkkk56 2020-09-21 23:22 采纳率: 0%
浏览 87
已结题

opencv区域生长不完整

区域生长的图片不完整

cv::Mat RegionGrow(const cv::Mat src, cv::Point2i pt, int th)
{
    cv::Point2i waitgrowing;                        //待生长点位置
    int ifgrow = 0;                                //标记是否生长过
    int startvalue = 0;                                //生长起点灰度值
    int nowvalue = 0;                                //当前生长点灰度值
    cv::Mat matDst = cv::Mat::zeros(src.size(), CV_8UC1);    //创建一个空白区域,填充为黑色
    //生长方向顺序数据
    int DIR[4][2] = { { -1 , 0 },  { 0 , -1 }, { 0 , 1 } , { 1 , 0 } };
    vector<cv::Point2i> growzhan;                      //生长点栈
    growzhan.push_back(pt);                            //将生长点压入栈中
    matDst.at<uchar>(pt.y, pt.x) = 255;                //标记生长点
    startvalue = src.at<uchar>(pt.y, pt.x);            //记录生长点的灰度值
    while (!growzhan.empty())                        //生长栈不为空则生长
    {
        pt = growzhan.back();                        //取出一个生长点
        growzhan.pop_back();
        //分别对4个方向上的点进行生长
        for (int i = 0; i<4; i++)
        {
            waitgrowing.x = pt.x + DIR[i][0];
            waitgrowing.y = pt.y + DIR[i][1];
            //检查是否是边缘点
            if (waitgrowing.x < 0 || waitgrowing.y < 0 || waitgrowing.x >(src.cols - 1) || waitgrowing.y > (src.rows - 1))
            {
                continue;
            }
            ifgrow = matDst.at<uchar>(waitgrowing.y, waitgrowing.x);        //当前待生长点的灰度值
            if (ifgrow == 0)                    //如果标记点还没有被生长
            {
                nowvalue = src.at<uchar>(waitgrowing.y, waitgrowing.x);
                if (abs(startvalue - nowvalue) < th)                    //在阈值范围内则生长
                {
                    matDst.at<uchar>(waitgrowing.y, waitgrowing.x) = 255;        //标记为白色 255
                    growzhan.push_back(waitgrowing);                    //将下一个生长点加入栈中
                }
            }
        }
    }
    return matDst;
}
```![图片说明](https://img-ask.csdn.net/upload/202009/21/1600701494_471144.jpg)
![图片说明](https://img-ask.csdn.net/upload/202009/21/1600701604_77044.jpg)
这是调用的程序:RegionGrow(image,cv::Point2i(30,170),70);
  • 写回答

2条回答 默认 最新

  • threenewbee 2020-09-22 00:09
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 Macbookpro 连接热点正常上网,连接不了Wi-Fi。
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程