本案例主要完成对玉米颗粒数量的计算,由于颗粒存在重叠的现象,因此需要对这种情况进行一定的图像处理,分离出每个颗粒的轮廓。

代码:

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>
#include <math.h>
#include <iostream>using namespace std;
using namespace cv;//double threshold = 200.0;int main()
{Mat grayimg, BinaryImg, morhImage;Mat img = imread("../img/44.png");imshow("原图", img);//二值化操作cvtColor(img, grayimg, COLOR_BGR2GRAY);threshold(grayimg, BinaryImg ,245 ,255,THRESH_BINARY );imshow("二值化",BinaryImg);//形态学腐蚀Mat kernel = getStructuringElement(MORPH_RECT, Size(15,15));dilate(BinaryImg ,morhImage,kernel);imshow("morphology", morhImage);//距离变换:用于二值化图像中的每一个非零点距自己最近的零点的距离,距离变换图像上越亮的点,代表了这一点距离零点的距离越远。Mat dist;bitwise_not(morhImage, morhImage);distanceTransform(morhImage, dist, CV_DIST_L2, 3);normalize(dist, dist, 0, 1.0, NORM_MINMAX);   //范围在0~1之间imshow("distance", dist);//形态学处理Mat MorphImg;dist.convertTo(MorphImg, CV_8U);threshold(MorphImg, MorphImg, 0.99, 255, THRESH_BINARY);  //上面像素值在0~1之间kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));morphologyEx(MorphImg, MorphImg, MORPH_OPEN, kernel);  //开操作imshow("t-distance" , MorphImg);//找到种子的轮廓区域vector<vector<Point>> contours;findContours(MorphImg, contours, CV_RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);// draw resultMat markers = Mat::zeros(img.size(), CV_8UC3);RNG rng(12345);     //随机产生颜色for (int i = 0; i < contours.size(); i++){drawContours(markers, contours, i, Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)), -1, 8, Mat());}cout << "number of corns: " << contours.size() << endl;imshow("result Img", markers);waitKey(0);
}

结果:

OpenCV案例(三): 玉米颗粒计数相关推荐

  1. 2021年大数据Flink(三十六):​​​​​​​Table与SQL ​​​​​​案例三

    目录 案例三 需求 编码步骤 代码实现-方式1 代码实现-方式2 案例三 需求 使用Flink SQL来统计5秒内 每个用户的 订单总数.订单的最大金额.订单的最小金额 也就是每隔5秒统计最近5秒的每 ...

  2. 2021年大数据Flink(二十一):​​​​​​​案例三 会话窗口

    目录 案例三 会话窗口 需求 代码实现 案例三 会话窗口 需求 设置会话超时时间为10s,10s内没有数据到来,则触发上个窗口的计算 代码实现 package cn.it.window;import ...

  3. Android 使用OpenCV的三种方式(Android Studio)

    from: http://blog.csdn.net/sbsujjbcy/article/details/49520791 其实最早接触OpenCV是很久很久之前的事了,大概在2013年的5,6月份, ...

  4. 数据分析与挖掘 - R语言:贝叶斯分类算法(案例三)

    案例三比较简单,不需要自己写公式算法,使用了R自带的naiveBayes函数. 代码如下: > library(e1071)> classifier<-naiveBayes(iris ...

  5. 开发环境配置--Ubuntu+Qt4+OpenCV(三)

    同系列文章 1. 开发环境配置--Ubuntu+Qt4+OpenCV(一) 2. 开发环境配置--Ubuntu+Qt4+OpenCV(二) 3. 开发环境配置--Ubuntu+Qt4+OpenCV(三 ...

  6. C++多态案例三-电脑组装

    C++多态案例三-电脑组装 多态案例三-电脑组装 多态案例三-电脑组装 案例描述: 电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储) 将每个零件封装出抽象基类,并且提供不同 ...

  7. Redis简单案例(三) 连续登陆活动的简单实现

    原文:Redis简单案例(三) 连续登陆活动的简单实现 连续登陆活动,或许大家都不会陌生,简单理解就是用户连续登陆了多少天之后,系统就会送一些礼品给相应的用户.最常见的 莫过于游戏和商城这些.游戏就送 ...

  8. 案例三:执行 JavaScript 语句

    案例三:执行 JavaScript 语句 隐藏百度图片 from selenium import webdriverdriver = webdriver.PhantomJS() driver.get( ...

  9. zabbix生产环境案例(三)

    生产环境案例(三) 链接:https://pan.baidu.com/s/1q5YwJMTcZLcS5OQ0iOu44A 提取码:8gdi 复制这段内容后打开百度网盘手机App,操作更方便哦 1. Z ...

最新文章

  1. leetcode算法题--包含min函数的栈
  2. (12)高斯和均值模糊放到一起
  3. Java开发以及Web 和移动程序员必须了解的10个框架
  4. java jvm 加载类的顺序_java JVM-类加载静态初始化块调用顺序
  5. 原神抽卡记录分析工具源码全开源
  6. js获取前一天/后一天
  7. tensorflow stack unstack操作
  8. Matlab中的有限域计算
  9. java - EM算法
  10. gcj编译java_用GCJ编译Java源文件成脱离JRE的exe可执行文件
  11. 如何查看虚拟机服务器ftp,如何通过FTP工具查看虚拟空间使用了多少?
  12. 无需U盘,30秒找回win10/win7用户密码
  13. Android SDK是什么?
  14. HDU 2389 Rain on your Parade(二分匹配+Hopcroft-Carp算法模板题)
  15. android 程序颜色,android – 以编程方式设置scrim颜色
  16. 王姨劝我学HarmonyOS鸿蒙2.0系列教程之五布局方法点击响应!
  17. 让Android程序教你画画
  18. 家装灯线走线图_求一套完整家庭装修电路图和走线图用来学习
  19. 如何在JSP中使用alert打印变量
  20. nuitka打包命令解释

热门文章

  1. docker 进入容器
  2. java set 接口_java笔记四:Set接口
  3. 线程池的使用与没使用的区别
  4. 下载mrt需要java_MRT Lab | 下载
  5. android layout 开关,Android多状态开关
  6. HDU-4145 A Simple Problem 简单数论
  7. spring batch 读mysql_spring batch csv文件导入到mysql数据库
  8. java实现rabbitmq路由模型(routing/topic queues), 生产者 消费者 交换机 消息队列
  9. XenApp 6安装过程中的两个常见错误
  10. c语言链表做歌手比赛系统,大型实验报告(歌手比赛系统)