使用OpenCV-python对植物图片进行分类

05-图像分类(含有3700张鲜花照片的数据集) 文章目录1. 数据准备 1. 数据准备 首先导入我们需要的包: import matplotlib.pyplot as plt import numpy as np import os import PIL import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers from tensorflow.keras.models import Sequential import pathlib 阅读详情

图片分类的思路和需要加载的库函数说明

图片分类的基本思路如下

  1. 首先需要有一个标注好图片里面花朵名称的数据集,例如命名好的rose.png
  2. 特征提取,即提取图片中的重要特征(能区别于其他图片的特征),并把重要特征加工成可以训练的数据,因为每种花的颜色分布不同,这里的思路是计算图片的彩色直方图信息,作为图片的特征。
  3. 标签提取,即把图片标注加工成数值信息,这里的思路是把图片的字符串名字转换成唯一的数字序列。
  4. 挑选一个分类器模型,例如随机森林分类器,然后划分训练集和测试集进行训练,得到学习器,即分类模型。
  5. 用这个训练好的模型,对图片进行分离,即利用模型预测。

需要使用的库函数和功能说明

# 标签处理
from sklearn.preprocessing import LabelEncoder

# 随机森林分类器模型
from sklearn.ensemble import RandomForestClassifier

# 对数据集进行有效划分的方法,划分成训练集和测试集
# from sklearn.cross_validation import train_test_split
# 在python新版本中,train_test_split被移动到model_selection中
from sklearn.model_selection import train_test_split

# 分类器性能评估报告
from sklearn.metrics import classification_report

# 基本矩阵运算库
import numpy as np

# 文件操作模块,主要是进行文件搜索和通配符操作
import glob

# opencv函数库
import cv2 

核心代码分析

数据预处理:文件处理和命名匹配

glob函数使用参考:python glob model - 漩涡鸣人 - 博客园

# 加载所有的图片和蒙版
imagePath = "dataset/images"
maskPath  = "dataset/masks"
# 利用sorted函数实现名字的一一对应,对每个图片进行蒙版的加载
imagePaths = sorted(glob.glob(imagePath + "/*.png"))
maskPaths  = sorted(glob.glob(maskPath + "/*.png"))

数据预处理:特征提取和标签提取

# 计算直方图,返回的是均一化之后的彩色直方图数据
features = desc.describe(image,mask)
# 构造测试数据集的特征信息集合
data.append(features)
# 注意图片的命名格式为"image_crocus_0001.png",我们需要提取的"crocus"是倒数第二个
target.append(imagePath.split("_")[-2])
# 初始化一个打标签的对象
le = LabelEncoder()
# 对target进行数字化标签index(因为字符串这种特征是不能直接拿来训练的,需要转换成唯一的数值)
target = le.fit_transform(target)

标签处理:unique()和fit_transform()的用法

target = ["happy","birthday","happy","wedding","happy","ending"]

unique对这串字符串进行去重:

targetNames = np.unique(target)
print(targetNames)
['birthday' 'ending' 'happy' 'wedding']

fit_transform最后算出每个字符串label对应的标签序号,此时brithday,ending,happy,wedding按照字母表顺序,分别对应0~3。

le = LabelEncoder()
target = le.fit_transform(target)
print(target)
[2 0 2 3 2 1]

学习模型:数据划分和模型训练

# 对数据进行训练集和测试集的划分,划分比例是7:3
(trainData,testData,trainTarget,testTarget) = \
    train_test_split(data,target,test_size=0.3,random_state=42)

# 初始化一个随机森林分类器模型
model = RandomForestClassifier(n_estimators=25,random_state=84)
# 用训练集训练这个分类器模型
model.fit(trainData,trainTarget)

# 用测试集合评估分类器性能,并打印出来
print(classification_report(testTarget, model.predict(testData),\
                            target_names=targetNames))

预测输出:利用训练好的模型进行图片分类

# 生成图片的特征(彩色直方图)
features = desc.describe(image,mask)
# 预测输出,从数字index转换成对应的字符串标签
flower = le.inverse_transform(model.predict([features]))[0]

完整代码附录和运行结果

from sklearn.preprocessing import LabelEncoder
from sklearn.ensemble import RandomForestClassifier
# from sklearn.cross_validation import train_test_split
# 在python新版本中,train_test_split被移动到model_selection中
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
import numpy as np
import glob
import cv2 

# 定义一个RGB直方图的类和方法
class RGBHistogram:
    def __init__(self,bins):
        self.bins = bins
    # 定义对图片特征的描述为彩色直方图
    def describe(self,image,mask=None):
        # 计算三个通道的直方图
        hist=cv2.calcHist([image],[0,1,2],mask,self.bins,[0,256,0,256,0,256])
        # 直方图均一化,减少图片亮度和对比度信息的干扰
        cv2.normalize(hist,hist)
        return hist.flatten()

# 加载所有的图片和蒙版
imagePath = "dataset/images"
maskPath  = "dataset/masks"
# 利用sorted函数实现名字的一一对应,对每个图片进行蒙版的加载
imagePaths = sorted(glob.glob(imagePath + "/*.png"))
maskPaths  = sorted(glob.glob(maskPath + "/*.png"))

# data保存彩色直方图信息,保存测试数据集的feature
data = []
# target保存图片名称的字符串信息,相当于测试数据的label
target = []

# 实例化一个计算RGB直方图的对象,类似于一个操作句柄
desc = RGBHistogram([8,8,8])

# 数据预处理,把照片信息转换成可训练的数据
for (imagePath,maskPath) in zip(imagePaths,maskPaths):
    # 读取照片和蒙版
    image = cv2.imread(imagePath)
    mask  = cv2.imread(maskPath)
    # 虽然蒙版已经是黑白的了,但要确保图片格式也是灰度表示的
    mask  = cv2.cvtColor(mask,cv2.COLOR_BGR2GRAY)
    # 计算直方图,返回的是均一化之后的彩色直方图数据
    features = desc.describe(image,mask)
    # 构造测试数据集的特征信息集合
    data.append(features)
    # 注意图片的命名格式为"image_crocus_0001.png",我们需要提取的"crocus"是倒数第二个
    target.append(imagePath.split("_")[-2])

# 这时候的target里面保存的是字符串,并不是具体的数值,还不能进行学习
# 对名字进行去重处理,注意target本身没变,targetNames是去重之后的标签名
targetNames = np.unique(target)
# 初始化一个打标签的对象
le = LabelEncoder()
# 对target进行数字化标签index(因为字符串这种特征是不能直接拿来训练的,需要转换成唯一的数值)
target = le.fit_transform(target)

######################### 至此,数据预处理已经全部完成 ##############################

# 对数据进行训练集和测试集的划分,划分比例是7:3
(trainData,testData,trainTarget,testTarget) = \
    train_test_split(data,target,test_size=0.3,random_state=42)

# 初始化一个随机森林分类器模型
model = RandomForestClassifier(n_estimators=25,random_state=84)
# 用训练集训练这个分类器模型
model.fit(trainData,trainTarget)

# 用测试集合评估分类器性能,并打印出来
print(classification_report(testTarget, model.predict(testData),\
                            target_names=targetNames))

######################### 至此,训练已经全部完成 ##############################

# 随机抽取10个案例进行测试
for i in np.random.choice(np.arange(0,len(imagePaths)),10):
    imagePath = imagePaths[i]
    maskPath  = maskPaths[i]
    image = cv2.imread(imagePath)
    mask  = cv2.imread(maskPath)
    mask  = cv2.cvtColor(mask,cv2.COLOR_BGR2GRAY)
    
    # 生成特征(彩色直方图)
    features = desc.describe(image,mask)
    # 预测输出,从数字index转换成对应的字符串标签
    flower = le.inverse_transform(model.predict([features]))[0]
    print(imagePath)
    print("According to RFT, this flower is {}".format(flower))
    cv2.imshow("predicted to be {}".format(flower.upper()),image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
cv2.destroyAllWindows()

学习器的性能如下

 				precision    recall  f1-score   support

      crocus       0.92      1.00      0.96        12
       daisy       0.88      0.93      0.90        15
       pansy       1.00      0.85      0.92        20
   sunflower       0.96      1.00      0.98        24

    accuracy                           0.94        71
   macro avg       0.94      0.95      0.94        71
weighted avg       0.95      0.94      0.94        71


预测输出效果:

在这里插入图片描述

深度学习花的分类识别 项目背景深度学习花的分类识别项目的背景是指利用深度学习技术对花朵进行自动分类和识别的项目。在传统的花卉分类识别中,通常需要人工进行观察和判断,这既费时又费力。而深度学习技术的出现,为花卉分类识别提供了一种快速、准确且自动化的解决方案。深度学习是一种模仿人类神经网络的计算模型,通过多层次的神经网络结构,可以从大量的数据中学习和提取特征,从而实现对复杂问题的解决。在花卉分类识别项目中,深度学习算法可以通过对大量花卉图像进行训练,学习到花卉的特征和模式,从而实现对花卉的自动分类和识别。 阅读详情

相关推荐

opencv计算植物叶面积_叶直径_叶周长_python_opencv 根据面积计算直径

利用python自带的opencv库来计算植物叶片的叶面积、叶直径和叶周长,拍摄图片就可以直接得到真实的叶面积、叶直径和叶周长。

2401_87373364的博客 885

毕设 深度学习花卉识别 - python 机器视觉 opencv

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是🚩深度学习花卉识别 - python 机器视觉 opencv🥇学长这里给一个题目综合评分(每项满分5分)难度系数:3分工作量:3分创新点:4分🧿。

HUXINY的博客 5145

Python OpenCV3 图像分类 - 使用 K-means 算法进行图像聚类

本文介绍了 K-means 算法在图像分类中的应用,并提供了 Python OpenCV3 实现代码。掌握该方法可以帮助我们更好地处理和理解大量的图像数据,具有广阔的应用前景。

. 1426

图像识别毕业设计 opencv实现植物识别算法系统 - python 深度学习

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是🚩基于深度学习的植物识别算法研究与实现🥇学长这里给一个题目综合评分(每项满分5分)难度系数:4分工作量:4分创新点:3分。

kooerr的博客 2294

opencv-python空白图上随机种植物

先在网上找个可以看的植物图片 然后我们使用ps功能将植物一个个裁剪下来。 先弄个5张图片出来测试一下 然后在ps里面生成一个白图,新建一个1080*720的 然后导出图片在桌面,当然你也可以直接用python代码生成一张白色图片 Img = 255 * np.ones((h, w, 3), dtype=np.uint8) # 生成全白的图片 然后我们需要做的就是将5给植物图片随机的种植在那张白图上面,效果如下: 那么直接来看代码吧 #5张植物图片和1张白色...

分享知识 930

opencv-python空白图上随机种植物2-保留png图像透明度

上一章节的随机种植植物存在一点小问题,就是当图片和图片直接重合的时候就会导致很突兀,比如下图,还是之前的代码,植物图片种植100个左右。 是不是内心中一万只xxx飞过。 我们来看下上一版本的代码 # 5张植物图片和1张白色背景图都放置在当前2文件夹下面 from PIL import Image import random # 读入5张图片 img1 = Image.open('./2/1.png') img2 = Image.open('./2/2.png') img3 = Image.o.

分享知识 894

Python OpenCV 显示图片,图片分类

1 def divide_image(path,g_path1,g_path0): 2 img_lst = os.listdir(path) 3 for i in img_lst: 4 print('类别1,类别0') 5 img = cv2.imread(os.path.join(path,i)) 6 ...

L99887766的博客 1149

基于Python与深度学习的农作物病虫害识别项目全流程解析

图像分类是计算机视觉领域的核心任务之一,旨在为输入图像分配一个预定义的类别标签。其基本原理是通过卷积神经网络(CNN)等深度学习模型,自动从海量图像数据中学习并提取具有判别性的特征。这项技术的价值在于能够将复杂的视觉模式识别问题自动化,极大地提升了信息处理的效率和规模。在工程实践中,图像分类技术已广泛应用于安防监控、医疗影像分析、工业质检以及智慧农业等多个场景。例如,在智慧农业领域,通过分析作物叶片图像实现病虫害的自动识别与分类,成为AI技术赋能传统产业的一个典型应用。本项目以农作物病虫害识别为具体案例,详

weixin_29045585的博客 261

opencv计算植物叶面积_叶直径_叶周长_python

利用python自带的opencv库来计算植物叶片的叶面积、叶直径和叶周长,拍摄图片就可以直接得到真实的叶面积、叶直径和叶周长。

HYSliuliuliu的博客 1万+

基于Python与百度AI的植物识别桌面应用开发实战

计算机视觉作为人工智能的核心分支,其原理在于让机器“看懂”图像内容。通过深度学习模型对海量图像数据进行训练,计算机能够学习并识别其中的物体特征。这项技术的核心价值在于将复杂的视觉信息转化为可处理的数据,极大地拓展了自动化应用的边界。在工程实践中,开发者无需从零构建模型,利用成熟的云服务API(如百度AI开放平台)即可快速集成图像识别能力,这大幅降低了技术门槛并提升了开发效率。其应用场景广泛,从工业质检到医疗影像分析,再到日常生活辅助工具。本文聚焦于一个具体的工程实践案例:结合Python编程语言、PyQt5

weixin_29038537的博客 259

基于Python与百度API的植物识别系统开发实战:从PyQt5界面到毕业设计实现

图像识别作为人工智能的核心应用领域,其原理是通过深度学习模型对图像特征进行提取与分类。这项技术为各行各业带来了显著的效率提升与自动化价值,尤其在植物分类、农业科技等场景中展现出广泛的应用潜力。本文聚焦于一个结合百度AI开放平台API与PyQt5图形界面的毕业设计项目,详细拆解了如何构建一个完整的植物识别桌面应用。项目涉及API申请与鉴权、图像预处理、网络请求处理以及GUI开发等关键技术环节,并深入探讨了代码组织、异常处理与项目打包等工程实践问题,为计算机及相关专业学生提供了一个难度适中、技术栈清晰且具备良好

weixin_42530793的博客 318

基于深度学习的植物图像识别系统-python

本项目是一个基于深度学习的植物图像识别系统,通过ONNX模型实现4066种植物分类(Top-1准确率84.8%)。系统支持GUI交互选图、结果可视化标注(显示物种/属/科分类)、批量识别和历史记录保存(JSON格式),同时提供无GUI控制台版本。采用Python3.13+ONNXRuntime+OpenCV技术栈,包含图像处理、模型推理和中文标注功能,适合作为编程入门实践项目。模型文件29.5MB,依赖主流深度学习库,已在Windows10+Anaconda环境下测试通过。(注:项目为教学用途,实际工作场景

wjwjwjd的博客 181

Python-opencv-植物叶片识别

Python-opencv-植物叶片识别

用Python+OpenCV给贵州常见植物做个‘身份证’:从茅栗到楮的自动识别实践

本文介绍了如何利用Python和OpenCV为贵州常见植物构建自动识别系统,涵盖从茅栗到楮的13种植物。通过计算机视觉技术提取叶片形态和花果特征,结合传统机器学习分类器,实现轻量化且可解释的植物识别方案。该系统适用于生态调查、科普教育等场景,在实地测试中平均准确率达83.5%。

weixin_31499265的博客 258

故障处理:Oracle一体机磁盘故障时磁盘组重平衡失败的故障处理

摘要: Oracle Exadata一体机出现磁盘故障案例,存储节点故障灯未亮但磁盘已产生大量坏块,导致重平衡失败。文章强调了一体机硬件巡检需检查6个关键维度:节点messages日志、存储cell告警日志、CellCLI日志、ASM告警日志、ILOM日志及服务器信号灯。故障分析显示硬盘物理故障导致磁盘组冗余受损,自动修复流程受阻。文中详细记录了通过CellCLI工具排查损坏磁盘的过程,并提供了完整的故障处理流程和命令输出。文章同步发布于微信公众号"IT民工的龙马人生"和博客网站(www

提供数据库技术支持(系统优化,故障处理,安装升级,数据恢复等) 1231

SDN:使用Postman控制ODL查看和下发流表

所谓,其实可被视作是SDN对网络设备的数据转发功能的一种抽象。在传统网络设备中,交换机和路由器的数据转发需要依赖设备中保存的二层MAC地址转发表或者三层的IP地址路由表,SDN交换机中使用的流表也是如此,不过在它的表项中整合了网络中各个层次的网络配置信息,从而在进行数据转发时可以使用更丰富的规则。其流表中的每个表项结果如下图所示:OpenFlow1.3流表的每个表项由6部分组成:1、匹配域:匹配域即OpenFlow1.0流表中的包头域,用于对交换机接收到的数据包的包头内容进行匹配。Ehter Des。

lyhaoyuhangyuan的博客 2535

【Python项目】AI动物识别工具

利用OpenCV、yolov5技术, python技术、Django框架、B/S架构、MySQL数据库等技术来进行一次AI动物识别技术的开发应用。通过B/S结构来进行网站的搭建,通过Python技术来搭建WEB系统,在浏览器中即可完成对系统的内容操作。通过结合OpenCV以及YOLO5来进行图像识别模块的开发,使得整个系统的操作过程需要保证简单,用户可以快速的上手操作,实现图像识别的功能运行。

Dyan_csdn的博客 1657

【XR技术介绍】深度解析|AI眼镜核心技术架构:从硬件层到端云AI全链路拆解

本文将逐层拆解AI眼镜完整技术架构,梳理硬件、感知、光学、端侧AI、软件云端五大核心层级,剖析核心数据流与行业技术瓶颈,同时附上标准化技术架构图,适合技术学习、方案汇报、行业科普使用。

houdou112358的博客 438

SUNFLOWER MATCH LAB植物匹配实验室一键部署教程:Python环境快速配置指南

本文介绍了如何在星图GPU平台上自动化部署🌻 SUNFLOWER MATCH LAB: 植物匹配实验室镜像,快速搭建植物识别与匹配的AI应用环境。用户通过该平台可一键启动服务,并利用其API接口,轻松实现上传植物图片、识别物种并匹配相似品种的核心功能,适用于园艺、农业研究等场景。

weixin_34885746的博客 224

Tesseract OCR 字库训练教程:提高识别率进阶版

通过 Tesseract 字库训练,你可以提高 OCR 对特定文本或字体的识别能力。训练过程包括准备训练数据、生成标签文件、运行训练工具,以及将训练结果集成到实际项目中。虽然训练过程需要一些时间和精力,但对于需要高精度文本识别的场景来说,字库训练是非常有效的提升识别率的方法。

小蜗牛的珍贵百宝箱 1869

基于YOLO11的垃圾分类AI模型训练实战

通过这次实战,我们成功训练出了一个高性能的垃圾分类AI模型。项目展示了从数据准备、模型训练到结果分析的完整流程,为AI在环保领域的应用提供了有价值的参考。项目文件结构│ ├── best.pt # 最佳模型权重│ └── last.pt # 最新模型权重├── results.csv # 详细训练数据├── results.png # 训练曲线图├── confusion_matrix.png # 混淆矩阵└── args.yaml # 训练参数配置。

lydz1的博客 1659

SUNFLOWER MATCH LAB植物匹配实验室Python入门教程:3步搭建AI植物识别环境

本文介绍了如何在星图GPU平台上自动化部署“🌻 SUNFLOWER MATCH LAB: 植物匹配实验室”镜像,快速搭建AI植物识别开发环境。通过该平台,用户可轻松创建包含预装环境的GPU实例,并利用镜像内置工具,实现植物图像的自动化加载、预处理与可视化分析,为后续的智能识别研究奠定基础。

weixin_32389853的博客 83

13.0 针对跳转不存在Activity崩溃处理,改成弹Toast提示,去掉崩溃弹窗,避免app崩溃退出

在开发过程中,在app跳转到某个没注册的Acitivity时,往往会出现崩溃的场景,这样也不好,接下来就从framework中来拦截这个崩溃,改成toast提示,

安卓兼职framework和app工程师的博客 49

用Python+PPBC图像库,手把手教你打造一个贵州常见树种识别小工具

本文详细介绍了如何利用Python和PPBC中国植物图像库开发一个贵州常见树种识别工具。从环境搭建、数据准备到图像处理、特征提取,再到机器学习模型构建和用户界面开发,手把手教你实现一个智能识别系统。通过随机森林和CNN模型的应用,结合Tkinter或Streamlit界面,最终完成一个实用的树种识别工具。

weixin_33182798的博客 307

【异常】Cursor报错We‘re having trouble connecting to the model provider. This might be temporary

在使用Cursor编辑器进行AI交互操作时,界面弹出如下报错提示,导致无法正常调用模型服务,影响使用流程:We’re having trouble connecting to the model provider. This might be temporary - please try again in a moment. 该报错核心含义为Cursor编辑器无法正常连接至背后的AI模型服务提供商(如OpenAI、Anthropic等),属于连接类异常,并非编辑器本身运行故障。经排查,该报错不具备破坏性,仅

奶爸的编程之路,也就一周冷个三天 1693

YOLOv11改进:引入SSA序列打乱注意力模块与MSCSA二次创新模块,适配目标检测、图像分类与实例分割

YOLOv11改进:引入SSA与MSCSA模块提升CV任务性能 摘要: 本文提出在YOLOv11中集成SSA(序列打乱注意力)和MSCSA(多尺度上下文序列打乱注意力)模块,以解决计算机视觉任务中的关键挑战。SSA通过序列打乱和局部窗口注意力机制,在降低计算复杂度的同时增强长距离依赖建模能力;MSCSA进一步引入多尺度上下文融合和动态序列打乱策略,优化了多尺度目标检测和实例分割的边界特征处理。这些改进有效解决了传统注意力机制在全局上下文建模、局部细节保持和序列顺序敏感性方面的不足。实验表明,该方法在目标检测

走向CTO的路上... 858
上一篇: 使用OpenCV-python实现颜色特征跟踪视频中的物体
下一篇: Python链表学习
刘凯KAI
博客等级 码龄15年 663粉丝 128原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值