机器学习水果识别 您所在的位置:网站首页 水果的质量特征 机器学习水果识别

机器学习水果识别

2023-10-03 23:58| 来源: 网络整理| 查看: 265

文章目录 一、用python+opencv实现物体特征值提取1、读取图像、转为灰度图像并降噪2、获取水果轮廓将最大轮廓画入最开始的img图像并显示将小于某一规模的轮廓删除 3、提取水果的面积周长及颜色获取二值图并计算面积提取边缘并计算周长提取平均颜色 二、代码

刚接触机器学习时候写的了,当时只知道机器学习不知道深度学习还以为只能人为的提取特征根据特征训练,后来才发现有深度学习这样更好的选择可以自动提取特征值。除了特征,深度学习在复杂背景下的效果也会明显优于普通机器学习,所以还是建议使用深度学习的方法。2019.4.25

一、用python+opencv实现物体特征值提取

以水果为例。要用机器学习来实现水果识别,无论是训练还是识别阶段都需要提取图片中水果的特征值。本篇将讲述如何提取水果的周长、面积、颜色、长度、宽度7个特征值。

1、读取图像、转为灰度图像并降噪 from math import * import cv2 as cv import numpy as np img = cv.imread(path) gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) blurred = cv.GaussianBlur(gray, (3, 3), 0) 2、获取水果轮廓

这里使用图像梯度的方法

xgrad = cv.Sobel(blurred, cv.CV_16SC1, 1, 0) ygrad = cv.Sobel(blurred, cv.CV_16SC1, 0, 1) edge_output = cv.Canny(xgrad, ygrad, 50, 150) cloneImg, contours, heriachy = cv.findContours(edge_output, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)

cv.findContours将图片中识别到的轮廓返回给contours变量,contours是一个list类型数据,里面存放了识别到的所有轮廓。有时候并不能很好的将目标轮廓完整的识别出来或者有没有去除掉的噪点的干扰所以不能简单粗暴的将获取到的轮廓全部运用。我尝试了一下两种方法:

将最大轮廓画入最开始的img图像并显示 max = 0 maxA = 0 for i, contour in enumerate(contours): x, y, w, h = cv.boundingRect(contour) if w*h>maxA: max=i maxA=w*h cv.drawContours(img, contours, max, (0, 0, 255), 2) #画框 x, y, w, h = cv.boundingRect(contours[max]) img = cv.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) cv.imshow('img', img)

结果如图: 理想状态下轮廓被识别为多部分

这个方法有一个问题:如果目标物体的轮廓被分为了多个区域,则不能完全显示出来轮廓。 所以想到了另一个方法:

将小于某一规模的轮廓删除 num=[] for i, contour in enumerate(contours): x, y, w, h = cv.boundingRect(contour) if w maxA): # max = i # maxA = w * h if w


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有