opencv物体识别-识别水果

这篇具有很好参考价值的文章主要介绍了opencv物体识别-识别水果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

玩一玩用opencv做一些简单的物体识别

1.思路讲解

我们基于简单的opencv的阈值分割,通过这个阈值分割,我们能把我们需要识别的物体在二值图里面变成白色,其余的变成黑色。然后对我们分割出来的物体部分提取轮廓,算出覆盖轮廓的最小矩形,然后画出这个矩形框,并且表上我们物体的名字。

2.样本展示

opencv物体识别-识别水果

opencv物体识别-识别水果
笔者就以这两张图片为例子,提取这两张图片里面的橙子。按照我们上面的思路,我们需要的是把橙子这个部分分割出来变成变成二值图的白色部分,其他部分变成黑色。

3.代码实现

首先我们读入一张橙子的图片,因为opencv默认读入的图片是bgr的形式,我们用的是hsv的颜色阈值,因此我们要将图片转换到hsv。然后经过一个中值滤波去除噪声,再经过一个开运算。

image=cv2.imread("c4.jpeg")
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
hsv = cv2.medianBlur(hsv, 5)
mask = cv2.inRange(hsv, (11, 43, 46), (25, 255, 255))
line = cv2.getStructuringElement(cv2.MORPH_RECT, (15, 15), (-1, -1))
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, line)

其中cv2.inRange会将图片中hsv值在(11, 43, 46),和(25, 255, 255)中间的值变成白色,不在中间的值变成黑色。
最后咱们处理好的二值图如下:
opencv物体识别-识别水果

然后就是提取轮廓,求出最大轮廓,这个最大轮廓也就是我们的橙子

contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    index = -1
    max = 0
    font = cv2.FONT_HERSHEY_SIMPLEX
    for c in range(len(contours)):
        area = cv2.contourArea(contours[c])
        if area > max:
            max = area
            index = c

随后就是对这个橙子的轮廓求外接矩形,然后把这个矩形画出来,并且再对应的位置上标上orange。

    if index >= 0:
        x, y, w, h = cv2.boundingRect(contours[index])
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
        cv2.putText(image,"orange",(x, y), font, 1.2, (0, 0, 255), 2)

最后的结果图片如下:
opencv物体识别-识别水果

4.总结

完整的代码如下:

import cv2

def process(image):
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    hsv = cv2.medianBlur(hsv, 5)
    mask = cv2.inRange(hsv, (11, 43, 46), (25, 255, 255))
    line = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5), (-1, -1))
    mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, line)
    cv2.imshow("mask",mask)

    # 轮廓提取, 发现最大轮廓
    contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    index = -1
    max = 0
    font = cv2.FONT_HERSHEY_SIMPLEX
    for c in range(len(contours)):
        area = cv2.contourArea(contours[c])
        if area > max:
            max = area
            index = c
    # 绘制
    if index >= 0:
        x, y, w, h = cv2.boundingRect(contours[index])
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
        cv2.putText(image,"orange",(x, y), font, 1.2, (0, 0, 255), 2)
    return image


image=cv2.imread("c1.jpeg")
result = process(image)
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

上面的代码是在图片中寻找图片中最大面积的橘子,下面我们设定一个面积阈值,只要大于这个阈值就是我们需要识别的目标,代码如下:

import cv2

def process(image):
	#面积阈值
    min_area=100
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    hsv = cv2.medianBlur(hsv, 5)
    mask = cv2.inRange(hsv, (11, 43, 46), (25, 255, 255))
    line = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5), (-1, -1))
    mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, line)
    cv2.imshow("mask",mask)


    contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    font = cv2.FONT_HERSHEY_SIMPLEX
    for c in range(len(contours)):
        area = cv2.contourArea(contours[c])
        if area > min_area:
        # 绘制
            x, y, w, h = cv2.boundingRect(contours[c])
            cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
            cv2.putText(image,"orange",(x, y), font, 1.2, (0, 0, 255), 2)
    return image


image=cv2.imread("c1.jpeg")
result = process(image)
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:
opencv物体识别-识别水果

5.扩展

当然只要能通过调试cv2.inRange的参数以提取好的二值图,不止是橙子,也可以用于其他物品的识别,也可以用于颜色识别。

6.缺点

当图片里有其他在参数范围内的比我们目标更大的物体的时候干扰就会很大,导致识别错误,扩展到其他物体上的时候还可能会遇到参数难调的情况,因此在识别场景比较复杂和识别类别比较多的时候还是建议用深度学习。文章来源地址https://www.toymoban.com/news/detail-460412.html

到了这里,关于opencv物体识别-识别水果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 竞赛项目 深度学习的水果识别 opencv python

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习的水果识别 opencv python 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/dancheng-se

    2024年02月13日
    浏览(44)
  • 【OpenCV】“帧差法”实现移动物体的检测(车辆识别)

    目录 一、帧差法 1、概念 2、为什么帧差法可以检测运动的物体?  二、使用OpenCV配合帧差法实现车辆识别 1、加载视频 2、灰度处理+帧差计算 3、二值化 4、腐蚀 5、膨胀 6、框选出车辆 三、全部代码+实现效果 1、代码 2、车辆检测效果 四、帧差法存在不足之处         帧差

    2024年02月02日
    浏览(37)
  • OpenCV4.x图像处理实例-YOLO v8检测与识别物体

    本文将详细介绍通过OpenCV的DNN模块,使用YOLO V8模型进行对静态图像、视频流和摄像头进行物体检测与识别。 YOLO v8 (You Only Look Once)由 Ultralytics 开发的一种先进的 (SOTA) 模型。它建立在以前成功的 YOLO 版本的基础上,并引入了新的功能和改进,以进一步提高性能和灵活性。

    2024年02月08日
    浏览(51)
  • OpenCV实例(九)基于深度学习的运动目标检测(三)YOLOv3识别物体

    目标检测,粗略地说就是输入图片/视频,经过处理后得到目标的位置信息(比如左上角和右下角的坐标)、目标的预测类别、目标的预测置信度。前面我们阐述了不少理论知识,现在需要动手实战了。对于初学者来说,自己实现YOLO算法不太现实,幸运的是OpenCV的DNN(Deep Neur

    2024年02月12日
    浏览(46)
  • opencv基础49-图像轮廓02-矩特征cv2.moments()->(形状分析、物体检测、图像识别、匹配)

    矩特征(Moments Features)是用于图像分析和模式识别的一种特征表示方法,用来描述图像的形状、几何特征和统计信息。矩特征可以用于识别图像中的对象、检测形状以及进行图像分类等任务。 矩特征通过计算图像像素的高阶矩来提取特征。这些矩可以表示图像的中心、尺度

    2024年02月13日
    浏览(30)
  • openvino系列 18. 通过OpenVINO和OpenCV实现实时的物体识别(RTSP,USB视频读取以及视频文件读取)

    在这个案例中,我们将OpenVINO的SSDLite MobileNetV2物体识别算法在视频流中进行推理。另外,如何通过多线程的方式进行视频读取,以及视频分析,这段代码是很值得一学。此案例涉及: 读取 Tensorflow 物体识别预训练模型 将 Tensorflow 模型转化为 IR 中间件 通过 OpenCV 实现视频但一

    2024年02月02日
    浏览(42)
  • 第三篇【传奇开心果短博文系列】Python的OpenCV库技术点案例示例:物体检测与识别

    物体检测与识别:包括人脸识别、目标检测、目标跟踪等功能。OpenCV OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。在物体检测与识别领域,OpenCV可以用于实现包括人脸识别、目标检测、目标跟踪等功能。 以下是一

    2024年01月25日
    浏览(39)
  • 水果采摘机器人的图像识别

    问题1:数苹果 思路: 使用图像处理技术进行预处理,如调整大小、灰度化、边缘检测等。 利用目标检测算法,例如基于深度学习的物体检测模型(如YOLO,SSD,Faster R-CNN),检测苹果的位置。 统计检测到的苹果数量。 绘制分布直方图。 代码示例:

    2024年02月05日
    浏览(29)
  • python基于深度学习的水果识别系统

    具体实现分为以下几个步骤: 数据集准备:从互联网上采集水果图片,并将其划分成训练集、验证集和测试集,以便用来训练和测试模型。 模型构建:使用 PyTorch 来构建深度学习模型,常用的有 AlexNet、VGG、ResNet 等。根据实验情况,可以选择不同的模型。 训练模型:使用准

    2024年02月07日
    浏览(27)
  • C# &OpenCV 从零开发(0):前言

    由于我想换个机器视觉+运动控制的工作,我就开始了自学机器视觉方向的技术。但是Halcon毕竟是商业化的库,国内用盗版还是怕被告。所以期望使用OpenCV。 OpenCV目前已知的方法的有两个版本 Python:用起来挺简单的,就是Python的语言不适合管理,感觉以后必定会出现问题,不适

    2024年01月18日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包