Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >openCV 简单物体识别

openCV 简单物体识别

作者头像
用户6021899
发布于 2019-09-04 08:38:19
发布于 2019-09-04 08:38:19
5.8K00
代码可运行
举报
运行总次数:0
代码可运行

本篇的例子介绍使用numpy和 OpenCV ,仅根据识别对象的尺寸和颜色进行简单的物体识别。专业的图像识别须借助机器学习(含神经网络即深度学习),本篇不做介绍。

下图截屏于支付宝登山赛小游戏,我们的任务是识别一系列截图中的小鸡和金币,并给出其各自中心位置的大概坐标(原点在图像的左上角)。

首先是抠掉不动的背景。上篇已有介绍,不再赘述。

接着将图像上部小鸡和金币不可能去的位置像素置零。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
img[0: int(0.38*H),:, :] =0 #上边部分没有待检测目标,不参与计算, 置零

再分离通道:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
B,G,R = cv2.split(img) # 分离三个颜色通道
#cv2.imshow("B", cv2.resize(B ,(int(0.3*W),int(0.3*H))))
#cv2.imshow("G", cv2.resize(G ,(int(0.3*W),int(0.3*H))))
#cv2.imshow("R", cv2.resize(R ,(int(0.3*W),int(0.3*H))))

然后分离小鸡等白色的部分:

小鸡的红色分量和蓝色分量都很亮。我们将图片红色通道稍暗的部分对应的蓝色通道置零,即分离出来了包含小鸡的白色部分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
B_ = B.copy() #深拷贝,防止串扰
B_[np.where(R<240)] =0 #红色通道稍暗的像素在蓝色通道置零
cv2.imshow("B_0", cv2.resize(B_ ,(int(0.3*W),int(0.3*H))))

然后转二值图,蓝色通道亮度小的部分置零以降噪。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
B_ = np.where(B_<230,0,255).astype(np.uint8)  #亮度小的置零
cv2.imshow("B_", cv2.resize(B_ ,(int(0.3*W),int(0.3*H))))

有了二值图,我们就可以对其进行轮廓检测,加以尺寸限制,在原始图上画出矩形框。这些命令我写在函数drawRect()中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#画矩形框且标记文本
def drawRect(src, dst, minW, minH, text='',maxW=np.inf, maxH= np.inf, RectColor=(0,0,255 ), textColor=(255,0,0)):
    contours, hierarchy = cv2.findContours(src, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    if contours is not None:
        for c in contours: #对于每一个轮廓
            x, y, w, h = cv2.boundingRect(c) #矩形框
            if minW<w and w< maxW and minH<h and h<maxH:  #按宽、高的大小过滤
                print(w,h)
                cv2.rectangle(dst, (x,y), (x+w, y+h), RectColor, 4) # 颜色均为(B,G,R)模式
                #putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])
                cv2.putText(dst,text,(x+int(0.2*w),y+int(0.5*h)), cv2.FONT_HERSHEY_COMPLEX, 1, textColor, 2, 4,False)
                print("{text} 坐标:{x}, {y}".format(text =text, x=x+int(0.5*w), y= y+int(0.5*h)))
               
drawRect(B_, img1st, 0.12*W, 0.05*H, text='chick')#识别小鸡

金币识别的方法也相似:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#金币在红色通道最明显
#cv2.imshow("B", cv2.resize(B ,(int(0.3*W),int(0.3*H))))
R_ = R.copy()#深拷贝,防止串扰
R_[np.where(B>150)] =0 #蓝色通道稍亮的 在红色通道置零
cv2.imshow("R_0", cv2.resize(R_ ,(int(0.3*W),int(0.3*H))))
R_ = np.where(R_<200,0,255).astype(np.uint8) #亮度小的置零
#cv2.imshow("R_", cv2.resize(R_ ,(int(0.3*W),int(0.3*H))))
drawRect(R_, img1st, W/200.0, H/60.0, 'gold',H/28.0, H/28.0) #识别金币

最后,我们就得到了识别的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cv2.imshow("detection", cv2.resize(img1st ,(int(0.3*W),int(0.3*H))))
cv2.waitKey()
cv2.destroyAllWindows()

小鸡和分数圈混到一起,有些瑕疵,需引入更细致的条件加以区分。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TensorFlow Lite for Android 初探(附demo)
TensorFlow Lite 是用于移动设备和嵌入式设备的轻量级解决方案。TensorFlow Lite 支持 Android、iOS 甚至树莓派等多种平台。
OpenCV学堂
2019/11/13
1.2K0
TensorFlow巨浪中的巨人:大数据领域的引领者 TensorFlow实战【上进小菜猪大数据系列】
大数据时代的到来带来了海量数据的处理和分析需求。在这个背景下,TensorFlow作为一种强大的深度学习框架,展现了其在大数据领域中的巨大潜力。本文将深入探索TensorFlow在大数据处理和分析中的应用,介绍其在数据预处理、模型构建、分布式训练和性能优化等方面的优势和特点。
上进小菜猪
2023/10/16
3040
TensorFlow巨浪中的巨人:大数据领域的引领者 TensorFlow实战【上进小菜猪大数据系列】
图像分类-flower_photos 实验研究
flower_photos 数据量比较小,所以 simple_cnn 可以在 trainset 上拟合到 0.99,意思就是数据复杂度 < 模型复杂度
XianxinMao
2021/08/22
6120
tensorflow版本的tansformer训练IWSLT数据集
代码来源:https://github.com/Kyubyong/transformer
西西嘛呦
2020/08/26
2K0
精度、延迟两不误,移动端性能新SOTA,谷歌TF开源轻量级EfficientNet
今天,谷歌在 GitHub 与 TFHub 上同时发布了 EfficientNet-Lite,该模型运行在 TensorFlow Lite 上,且专门针对移动设备 CPU、GPU 以及 EdgeTPU 做了优化。EfficientNet-Lite 为边缘设备带来了 EfficientNet 上强大的性能,并且提供五个不同版本,让用户能够根据自己的应用场景灵活地在低延迟与高精度之间选择。
机器之心
2020/03/25
5700
Text classification with TensorFlow Hub: Movie reviews
This notebook classifies movie reviews as positive or negative using the text of the review. This is an example of binary—or two-class—classification, an important and widely applicable kind of machine learning problem.
XianxinMao
2021/07/31
2840
TensorFlow Lite for Android 初探(附demo)一. TensorFlow Lite二. tflite 格式三. 常用的 Java API四. TensorFlow Lite
我们知道大多数的 AI 是在云端运算的,但是在移动端使用 AI 具有无网络延迟、响应更加及时、数据隐私等特性。
fengzhizi715
2018/12/07
3.2K0
TensorFlow-Slim图像分类库
本文介绍了如何使用深度学习模型进行图像分类,并探讨了在训练和评估模型时出现的问题及解决方案。
chaibubble
2018/01/02
2.6K0
TensorFlow-Slim图像分类库
Load and preprocess images
This tutorial shows how to load and preprocess an image dataset in three ways. First, you will use high-level Keras preprocessing utilities and layers to read a directory of images on disk. Next, you will write your own input pipeline from scratch using tf.data. Finally, you will download a dataset from the large catalog available in TensorFlow Datasets.
XianxinMao
2021/07/29
7160
【他山之石】Pytorch/Tensorflow-gpu训练并行加速trick(含代码)
“他山之石,可以攻玉”,站在巨人的肩膀才能看得更高,走得更远。在科研的道路上,更需借助东风才能更快前行。为此,我们特别搜集整理了一些实用的代码链接,数据集,软件,编程技巧等,开辟“他山之石”专栏,助你乘风破浪,一路奋勇向前,敬请关注。
马上科普尚尚
2021/01/28
1.6K0
【他山之石】Pytorch/Tensorflow-gpu训练并行加速trick(含代码)
图像分类任务中,Tensorflow 与 Keras 到底哪个更厉害?
转载来源:AI 研习社编译的技术博客 原标题:Tensorflow Vs Keras? — Comparison by building a model for image classificatio
崔庆才
2019/09/04
9640
图像分类任务中,Tensorflow 与 Keras 到底哪个更厉害?
迁移学习之快速搭建【卷积神经网络】
卷积神经网络 概念认识:https://cloud.tencent.com/developer/article/1822928
一颗小树x
2021/05/14
2K0
迁移学习之快速搭建【卷积神经网络】
使用自己的数据集训练MobileNet、ResNet实现图像分类(TensorFlow)| CSDN博文精选
之前写了一篇博客《使用自己的数据集训练GoogLenet InceptionNet V1 V2 V3模型(TensorFlow)》https://panjinquan.blog.csdn.net/article/details/81560537,本博客就是此博客的框架基础上,完成对MobileNet的图像分类模型的训练,其相关项目的代码也会统一更新到一个Github中,强烈建议先看这篇博客《使用自己的数据集训练GoogLenet InceptionNet V1 V2 V3模型(TensorFlow)》后,再来看这篇博客。
AI科技大本营
2019/12/23
7K0
使用NVIDIA TAO工具包优化Arm Ethos-U NPUs的AI模型
本文翻译自:《Optimizing AI models for Arm Ethos-U NPUs using the NVIDIA TAO Toolkit》
GPUS Lady
2023/10/28
4680
使用NVIDIA TAO工具包优化Arm Ethos-U NPUs的AI模型
AIoT应用创新大赛-基于TFML的迁移学习实践
NXP eIQ平台提供了嵌入式平台集成化的机器学习应用部署能力,支持BYOD(Bring Your Own Data)和BYOM(Bring You Own Model)的两种建模应用的工作流。
flavorfan
2022/02/23
2.2K0
AIoT应用创新大赛-基于TFML的迁移学习实践
keras.Model
Model groups layers into an object with training and inference features.
狼啸风云
2022/06/08
1.2K0
[源码解析] TensorFlow 分布式之 ParameterServerStrategy V2
对于 ParameterServerStrategy V2,我们将从几个方面来研究:如何与集群建立连接,如何生成变量,如何获取数据,如何运行。其中,变量和作用域我们在前文已经研究过,运行在 MirroredStrategy 里面也介绍,所以本文主要看看如何使用,如何初始化。在下一篇之中会重点看看如何分发计算。
罗西的思考
2022/05/15
1.3K0
TensorFlow 2.0到底怎么样?简单的图像分类任务探一探
从历史角度看,TensorFlow 是机器学习框架的「工业车床」:具有复杂性和陡峭学习曲线的强大工具。如果你之前用过 TensorFlow 1.x,你就会知道复杂与难用是在说什么。
机器之心
2019/04/29
1K0
TensorFlow 2.0到底怎么样?简单的图像分类任务探一探
《高效迁移学习:Keras与EfficientNet花卉分类项目全解析》
想象一下:如果一个已经会弹钢琴的人学习吉他,会比完全不懂音乐的人快得多。因为TA已经掌握了乐理知识、节奏感和手指灵活性,这些都可以迁移到新乐器的学习中。这正是迁移学习(Transfer Learning)的核心思想——将已掌握的知识迁移到新任务中。
机器学习司猫白
2025/03/12
1280
《高效迁移学习:Keras与EfficientNet花卉分类项目全解析》
基于Tensorflow2 Lite在Android手机上实现图像分类
Tensorflow2之后,训练保存的模型也有所变化,基于Keras接口搭建的网络模型默认保存的模型是h5格式的,而之前的模型格式是pb。Tensorflow2的h5格式的模型转换成tflite格式模型非常方便。本教程就是介绍如何使用Tensorflow2的Keras接口训练分类模型并使用Tensorflow Lite部署到Android设备上。
夜雨飘零
2020/07/22
3.4K0
基于Tensorflow2 Lite在Android手机上实现图像分类
推荐阅读
相关推荐
TensorFlow Lite for Android 初探(附demo)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验