qq_31376709 2021-08-03 17:29 采纳率: 100%
浏览 138
已结题

opencv计数项目实现及步骤

img
您好,这个图片计数可以实现吗?有什么难点,大致什么思路,可以说一下嘛?

  • 写回答

2条回答 默认 最新

  • 王大师王文峰 企业官方账号 2021-08-03 17:59
    关注

    opencv计数项目实现代码

    #include<iostream>
    #include<opencv.hpp>
    using namespace std;
    using namespace cv;
     
    int main()
    {
        //加载图像
        Mat src = imread("4.jpg");
        if (src.empty())
        {
            cout << "no image!" << endl;
            return -1;
        }
        imshow("src", src);
        //二值化
        Mat gray, binary;
        cvtColor(src, gray, COLOR_BGR2GRAY);
        imshow("gray", gray);
        threshold(gray, binary, 0, 255, THRESH_TRIANGLE);
        imshow("binary", binary);
        //图像形态学操作
        Mat kern1 = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1,-1));
        morphologyEx(binary, binary, MORPH_DILATE, kern1,Point(-1,-1),3);
        imshow("dilate", binary);
        //距离变换
        Mat dist;
        bitwise_not(binary, binary);//将白色背景变黑
        imshow("not", binary);
        distanceTransform(binary, dist, DIST_L2, 3);
        normalize(dist, dist, 0.0, 1.0, NORM_MINMAX);
        dist.convertTo(dist, CV_8UC1);
        imshow("dist", dist);
        //阈值分割
        Mat img;
        //threshold(dist, img, 0, 255, THRESH_BINARY | THRESH_OTSU);
        adaptiveThreshold(dist, img, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 85, 0.0);
        imshow("img", img);
        //腐蚀操作
        morphologyEx(img, img, MORPH_DILATE, kern1, Point(-1,-1),1);
        imshow("dilate-img", img);
        //寻找连通域
        vector<vector<Point>>contours;
        findContours(img, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
        Mat mask = Mat::zeros(src.size(), CV_8UC3);
        for (size_t i = 0; i < contours.size(); i++)
        {
            drawContours(mask, contours, static_cast<int>(i), Scalar(0, 0, 255), -1, 8);
        }
        cout << "个数:" << contours.size() << endl;
        imshow("result", mask);
     
        waitKey(0);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • beordie.cloud 2021-08-03 17:55
    关注

    这个和人眼识别是一样的,需要先确认检测物品然后计数,将已识别物品标记去掉,防止循环识别,将整张图过滤完后就可以输出计数了

    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月11日
  • 已采纳回答 8月3日
  • 创建了问题 8月3日

悬赏问题

  • ¥100 webapi的部署(标签-服务器)
  • ¥20 怎么加快手机软件内部计时的时间(关键词-日期时间)
  • ¥15 C语言除0问题的检测方法
  • ¥15 为什么四分管的内径有的是16mm有的15mm,四分不应该是12.7mm吗
  • ¥15 macos13下 ios交叉编译的问题
  • ¥15 bgz压缩文件怎么打开
  • ¥15 封装dll(引入了pcl的点云设计库)
  • ¥30 关于#开发语言#的问题:我需要在抄板的基础上再抄板抄程序,根据RDA8851CM基础上开发
  • ¥15 oracle 多个括号,怎么删除指定的括号及里面的内容?
  • ¥15 小新14API2019想用bios调风扇