OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 3665|回复: 3

findcontours获取轮廓后如何获得轮廓内平均灰度值

[复制链接]
发表于 2017-12-21 11:29:21 | 显示全部楼层 |阅读模式
小白一枚,最近在做缺陷检测的东西,用到findcontours函数,找到的contours轮廓里已经有了很多信息但是不知道如何使用,现在想对轮廓内所有点的灰度值求平均,请问应该怎么做?
回复

使用道具 举报

 楼主| 发表于 2017-12-21 14:31:22 | 显示全部楼层
        for (int Size = 0; Size != size(twocontours); Size++)
        {
                int value = 0;
                int meanvalue = 0;
                for (int Size0 = 0; Size0 != size(twocontours[Size]); Size0++)
                {
                        value = value + crop.at<uchar>(twocontours[Size][Size0].x, twocontours[Size][Size0].y);
                        meanvalue = value / size(twocontours[Size]);
                }
                cout << "第" << Size+1 << "个轮廓内平均灰度值为:" << meanvalue << endl;
        }

自己写了一下现在能计算出平均灰度值但是要怎么样才能设置一个阈值把平均灰度值低于阈值的轮廓去掉呢求解
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-22 11:00:04 | 显示全部楼层
                if (!twocontours.empty())
        {
                vector<vector<Point> >::iterator it;
                for (it = twocontours.begin(); it != twocontours.end();)
                {
                        for (int Size = 0; Size != size(*it); Size++)
                        {
                                int value = 0;
                                int meanvalue = 0;
                                for (int Size0 = 0; Size0 != size(it[Size]); Size0++)
                                {
                                        value = value + crop.at<uchar>(it[Size][Size0].x, it[Size][Size0].y);
                                        meanvalue = value / size(it[Size]);
                                }
                                                                        if (meanvalue > 180)
                                        twocontours.erase(it);
                                        else it++;
                                cout << "第" << Size + 1 << "个轮廓内平均灰度值为:" << meanvalue << endl;
                        }
                }
        }
又写了一个我觉得没有什么问题的,但是运行出错,求教是哪里出了问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-22 11:14:17 | 显示全部楼层
value = value + crop.at<uchar>(it[Size][Size0].x, it[Size][Size0].y);
出错位置是这句,我调试了一下总是在数组的最后几个数的位置会出问题,不知道是哪里写错了,求大神解答啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-5-4 08:42 , Processed in 0.008296 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表