zoukankan      html  css  js  c++  java
  • 米粒识别

    # encoding: utf -8
    import cv2 as cv
    import copy

    filename = 'rice.png'
    img = cv.imread(filename)
    # 灰度处理, 即使是黑白图片在计算机中也是三通道
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

    # 使用大津算法阈值化
    _, bw = cv.threshold(gray, 0, 0xff, cv.THRESH_OTSU)

    element = cv.getStructuringElement(cv.MORPH_CROSS, (3, 3))
    # 使用数学形态学开运算减少噪声
    bw = cv.morphologyEx(bw, cv.MORPH_OPEN, element)
    # 为了对阈值化图像进行分割,将阈值化结果进行deepcopy
    seg = copy.deepcopy(bw)
    # 使用findContours得到分割完之后各个区域对应的轮廓,返回在cnts,也就是各个轮廓的集合
    bin, cnts, hier = cv.findContours(seg, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
    count = 0

    for i in range(len(cnts), 0, -1):
    # 对所有轮廓进行一个循环,先得到当前轮廓,面积小于10则可能是噪声,丢弃
    c = cnts[i-1]
    area = cv.contourArea(c)
    if area < 10:
    continue
    count = count + 1
    print('blob', i, ':', area)
    # 得到矩阵四个顶点
    x, y, w, h = cv.boundingRect(c)
    # 在img图片中输出分割后的矩形,rectangle函数参数依次为原图,左上角顶点pt,右下角顶点pt,颜色三元组,宽度
    cv.rectangle(img, (x, y), (x+w, y+h), (0, 0, 0xff), 1)
    # 在img图片中输出计数文本
    cv.putText(img, str(count), (x, y), cv.FONT_HERSHEY_PLAIN, 0.5, (0, 0xff, 0))

    print('米粒数量: ', count)
    cv.imshow('原图', img)
    cv.imshow('阈值化', bw)


    cv.waitKey()
    cv.destroyWindow()

  • 相关阅读:
    MATLAB读取文件——从非常规文本文件中读取数据
    注意——CAN通信设备控制
    硬件——USB传输速度和物理接口
    STM32F4-浮点DSP库的MDK开发环境的设置
    CRC校验
    蓝牙串口使用心得
    Mysql 层级、执行顺序、执行计划分析
    讲一讲垃圾回收算法
    【转】Java中的新生代、老年代、永久代和各种GC
    工具链接
  • 原文地址:https://www.cnblogs.com/hanker99/p/14481751.html
Copyright © 2011-2022 走看看