图像综合处理小设计实验—opencv背景分割,硬币检测

2023-11-06

图像综合处理小设计—opencv背景分割,硬币检测

一、机器视觉图像的目标与背景的分割与提取

1.主要要求:

对输入图像可以达到目标和背景的分割 建议方法: (1)将已知图像进行消噪处理 (2)对彩色图像进行目标和背景分析 (3)通过阈值法将图像进行分割 (4)确定目标的位置 实现效果:左一为原始图像,左二为分割提取的目标;右一为要求图片。
在这里插入图片描述

2.算法代码

hsv = cv2.cvtColor(new_img, cv2.COLOR_BGR2HSV)
lower_red = np.array([0,43,46])
upper_red = np.array([10,255,255])
lower_yellow = np.array([20,43,46])
upper_yellow = np.array([34,255,255])
markr = cv2.inRange(hsv, lower_red, upper_red)
marky = cv2.inRange(hsv, lower_yellow, upper_yellow)
#腐蚀运算,腐蚀掉较小噪点
kerne2 = np.ones((9,9),np.uint8)
res1 = cv2.morphologyEx(markr, cv2.MORPH_DILATE, kerne2)
res2 = cv2.morphologyEx(marky, cv2.MORPH_DILATE, kerne2)
cv2.imshow('img_org',new_img)
cv2.imshow("redapple", res1)
cv2.imshow("yellowapple", res2)

3.效果

在这里插入图片描述

二、基于Sobel算子完成对图像的搜索

1.主要要求:

从图像中检索出飞机图像,要求五架飞机全部找到。 建议方法: (1)对待检测图片进行预处理(灰度化、二值化); (2)对图像进行边缘提取; (3)改进算子,使图像达到标准对照图像效果。

2.主要代码

image = cv2.imread('pla.jpeg')  #plane5.jpg
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
ret1, th1 = cv2.threshold(gray, 55, 255, cv2.THRESH_BINARY)
sobel_x = cv2.Sobel(gray,cv2.CV_64F,1,0,3)
sobel_y = cv2.Sobel(gray,cv2.CV_64F,0,1,3)
sobel_x = cv2.convertScaleAbs(sobel_x)
sobel_y = cv2.convertScaleAbs(sobel_y)
sobel_xy = cv2.addWeighted(sobel_x,0.2,sobel_y,0.8,0)
bin = cv2.bitwise_not(th1)
kerne2 = np.ones((3,3),np.uint8)
bin = cv2.morphologyEx(bin, cv2.MORPH_OPEN, kerne2)
images = [image,gray,bin,sobel_xy]
imgaesTitle = ['org', 'gray','bin', 'sobel']
plt.figure()
for i in range(4):
    plt.subplot(2, 2, i + 1)
    plt.imshow(images[i], 'gray')
    plt.title(imgaesTitle[i])
plt.show()

3.效果

在这里插入图片描述

三、硬币检测及计数

1.主要要求:

白色背景上扔几枚不同面值的硬币,拍摄图像,通过图像处理,获取硬币的数目及 金额。 建议方法: (1)图像分割; (2)边缘检测、滤波去燥; (3)连通区域检测,判断硬币个数; (4)边缘图像通过霍夫变换检测圆,进而检测硬币金额。

2.主要代码

(1)方法一:canny算子检测边缘

coins = cv2.imread('coin8.jpeg')
#coins = cv2.imread('coin6.jpeg')
n = 0.2
sp = coins.shape
height = round(n * sp[0])
weight = round(n * sp[1])
coins= cv2.resize(coins, (weight, height))
coins_gray = cv2.cvtColor(coins, cv2.COLOR_RGB2GRAY)
blurred = cv2.GaussianBlur(coins_gray, (11, 11), 0)
edge = cv2.Canny(blurred,0,220)  # 用Canny算子提取边缘
cv2.imshow('thresh',edge)
cnts = cv2.findContours(edge.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
print('硬币个数:',len(cnts))
cv2.drawContours(coins, cnts, -1, (0, 0, 255), 2)
cv2.imshow(str(len(cnts))+("coins"), coins)

(2)方法二:霍夫变换检测圆

coins=cv2.imread('coin.jpg')
n = 0.2
sp = coins.shape
height = round(n * sp[0])
weight = round(n * sp[1])
img= cv2.resize(coins, (weight, height))
cv2.imshow('img',img)
#灰度化
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#输出图像大小,方便根据图像大小调节minRadius和maxRadius
print('图像调整后大小',img.shape)
#霍夫变换圆检测
circles= cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,100,param1=100,param2=30,minRadius=5,maxRadius=100) #coin.jpg
#输出返回值,方便查看类型
print('所有圆的信息\n',circles)
#输出检测到圆的个数
print('硬币个数为',len(circles[0]))
#根据检测到圆的信息,画出每一个圆
for circle in circles[0]:
    #圆的基本信息
    print(circle[2])
    #坐标行列
    x=int(circle[0])
    y=int(circle[1])
    #半径
    r=int(circle[2])
    #在原图用指定颜色标记出圆的位置
    img=cv2.circle(img,(x,y),r,(0,0,255),3)
for i in range(len(circles[0])):
    r=circles[0][i][2]
    if r>57 and r<63:
        print('硬币面值为1角')
    elif r>63 and r<=68:
        print('硬币面值为5角')
    else:
        print('硬币面值为1元')

3.效果

(1)方法一:canny算子检测边缘
在这里插入图片描述
(2)方法二:霍夫变换检测圆
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图像综合处理小设计实验—opencv背景分割,硬币检测 的相关文章

  • 如何使用python登录页面,该页面需要服务器在第一次请求时响应会话ID?

    我正在编写一个脚本来登录某个网页 我使用 request 和 request session 模块来实现此目的 在使用登录参数的第一个请求时 服务器响应一个会话 ID 如何设置该会话 ID 以进一步登录到同一页面 url some url
  • 如何将人物传奇带到前台?

    我有一系列子图 其中每个子图都有一个图例 我想在每个子图之外与相邻子图重叠 问题在于图例位于其自己的图的 顶部 但位于相邻图的下方 Legend 不将 zorder 作为参数 所以我不知道如何解决这个问题 这是我使用过的代码 import
  • 如何将 UPX 与 pyinstaller 一起使用?

    如何将 UPX 与 pyinstaller 一起使用 我正在关注文档 我已经下载了UPX 我的文件如下所示 import csv import selenium import pandas print Hello 然后我运行 pyinsta
  • Python实时读取串口数据

    我正在使用 Python 中的脚本通过串行端口以 2Mbps 的速度从 PIC 微控制器收集数据 PIC 在 2Mbps 下完美定时工作 FTDI USB 串行端口在 2Mbps 下工作也很好 均通过示波器验证 我每秒发送消息 大小约为 1
  • 将 2D Panda 的 DataFrame 列表转换为 3D DataFrame

    我正在尝试创建一个将标签值保存到 2D DataFrame 的 Pandas DataFrame 这是我到目前为止所做的 我正在使用读取 csv 文件pd read csv并将它们附加到列表中 出于这个问题的目的 让我们考虑以下代码 imp
  • 使用 NumPy 的 Mittag-Leffler 函数的不稳定性

    在尝试重现时Wolfram MathWorld 上的情节 http mathworld wolfram com Mittag LefflerFunction html 并试图帮助这个问题 https stackoverflow com qu
  • 按字符串子字符串的列过滤 Pandas 数据框

    我正在尝试使用列中的字符串值是数据框外部字符串的子字符串的条件来过滤数据框 下面的例子 df a b c hello bye hello reference str hello there output a c 一种方法可能是使用正则表达式
  • 手动安装开放多语言世界网 (NLTK)

    我正在使用一台只能访问专用网络并且无法从命令行发送指令的计算机 因此 每当我必须安装 Python 包时 我都必须手动安装 我什至不能使用 Pypi 幸运的是 NLTK 允许我手动下载语料库 从here https www nltk org
  • Pygooglevoice登录错误

    另一个人问了这个问题 但没有回复 所以我再问一遍 我正在尝试使用 pygooglevoice API 但是当我运行 SMS py 示例脚本时 它给了我一个登录错误 我已经安装了 Enthought python 我想也许我还需要安装其他东西
  • 如何从 Python 3.5 降级到 3.4

    我想安装 kivy 链接在这里 https kivy org docs installation installation windows html install win dist 用于项目 但是 当尝试使用 pip 安装它所依赖的包时
  • 是否可以在 Jupyter 笔记本中显示控制台?

    我希望能够使用 Jupyter 笔记本中的控制台在环境中进行摆弄 添加额外的单元格意味着我总是必须滚动到最底部或在我想要 类似控制台 文本字段的任何地方创建新单元格 是否可以有一个永久的控制台窗口 例如在窗口底部 Thanks 您可以启动连
  • 在 python 中使用 subprocess.call 时如何将 stdout 重定向到文件?

    我正在从另一个 python 脚本 A 调用一个 python 脚本 B 使用 subprocess call 如何将 B 的标准输出重定向到指定的文件 我正在使用 python 2 6 1 传递一个文件作为stdout参数为subproc
  • 导入我自己的模块时出现“ImportError:没有名为...的模块”

    我正在尝试导入模块 但不断收到导入错误 在 PortfolioStatus py 文件中 我有以下代码 它从 share data py 模块导入 share data 类 from Shares share data import sha
  • 如何向 RetrievalQA.from_chain_type 添加内存?或者,如何向 ConversationalRetrievalChain 添加自定义提示?

    如何向 RetrievalQA from chain type 添加内存 或者 如何向 ConversationalRetrievalChain 添加自定义提示 在过去的两周里 我一直在尝试制作一个可以通过文档聊天的聊天机器人 因此不仅仅是
  • Tkinter 如何根据此组合框自动更新第二个组合框

    我在 Tkinter Python 中遇到了组合框更新的问题 我有两个组合框 组合框A with values A B C and 组合框B 我想要的是 当值A在组合框中选择A然后在组合框中B显示值 1 2 3 当值B在组合框中选择A然后在
  • 对 Python 列表元素进行分组

    我有一个 python 列表 如下所示 my list 25 1 0 65 25 3 0 63 25 2 0 62 50 3 0 65 50 2 0 63 50 1 0 62 我想根据以下规则对它们进行排序 1 gt 0 65 0 62 l
  • 设置字符串中单词或字符数的限制

    假设我有一个字符串元素列表 wordlist hi what s up home diddle mc doo Oh wise master kakarot hello have a da 我希望列表中的每个元素最多包含 3 个单词或 20
  • 将 .parquet 编码为 io.Bytes

    目标 将 Parquet 文件上传到 MinIO 这需要将文件转换为字节 我已经能够做到这一点了 csv json and txt bytes data to csv encode utf 8 bytes json dumps self d
  • Python Web 编程的不同方法的优缺点

    我想使用 Python 编写一些服务器端脚本 但我对这样做的方法有点迷失了 它从 DIY CGI 方法开始 似乎以一些相当强大的框架结束 这些框架基本上可以自己完成所有工作 中间有很多东西 比如web py http webpy org P
  • 真实值与预测值的降维可视化

    我有一个数据框 如下所示 label predicted F1 F2 F3 F40 major minor 2 1 4 major major 1 0 10 minor patch 4 3 23 major patch 2 1 11 min

随机推荐

  • 学习笔记☞ MySQL(二)

    1 字符类型的宽度和数值类型的宽度区别 1 数值类型的宽的仅仅为显示宽度 只用于select查询显示 和占用的存储空间大小无关 可用zerofill查看效果 2 字符类型的宽度超过则无法存储 2 where 条件子句 配合查询 修改 删除操
  • ECDH secp256k1 集成

    在Android 原生api是不支持secp256k1算法的 所以要先集成以下库 implementation com madgag spongycastle core 1 58 0 0 compile com madgag spongyc
  • JavaScript学习总结【12】、JS AJAX应用

    1 AJAX 简介 AJAX 音译为 阿贾克斯 Asynchronous JavaScript and XML 异步的 JavaScript 和 XML 是指一种创建交互式网页应用的网页开发技术 也就是在无需重新加载整个网页的情况下 能够更
  • 一文带你了解 MQTT 协议(连接 ONE-NET平台)

    MQTT 协议连接 ONE NET 详解 写在前面 本文采用 网络调试助手 发送MQTT协议报文 16进制 连接 ONE NET 平台 采用的 为 MQTT v3 1 1 标准协议 带你直接 学会 MQTT 协议 一 ONE NET 端创建
  • Ubuntu20.04安装vscode打开出现花屏

    目录 前言 出现原因 解决方法 探索 最终方案 前言 最近在Ubuntu20 04安装vscode打开后出现了花屏的情况 在网上查找各种方法后终于解决 在这里记录一下 希望对大家有所帮助 出现原因 出现这样的问题是因为vscode开了GPU
  • idea中创建git分支

    1 使用idea打开项目 点击项目右下方的分支按钮 2 选择New Branch 3 输入分支名称后 create即可 4 提交和推送 注意 如果没有修改代码 就不需要提交 只需推送即可创建分支
  • 数据结构--双链表的c/c++实现(超详细注释/实验报告)

    数据结构 双链表的c c 实现 超详细注释 实验报告 知识小回顾 如果希望从表中快速确定某一个结点的前去 其中一个解决方法就是在单链表的每个结点再增加一个指向其前去的指针域prior 这样形成的链表中就有两条方向不同的链 称之为双向链表 D
  • 100天精通Python(数据分析篇)——第57天:Pandas读写Excel(read_excel、to_excel参数说明+代码实战)

    文章目录 1 read excel 读取Excel文件 io sheet name header names index col usecols squeeze skiprows 2 to excel 写入Excel文件 excel wri
  • Unity Android 真机调试 + 夜神模拟器调试 + ADB Logcat

    备注 调试前需要先检测java和SDK的环境变量是否OK 在CMD中输入java和adb检测 官方文档 https docs unity3d com Manual AttachingMonoDevelopDebuggerToAnAndroi
  • Python+unittest+requests+HTMLTestRunner 完整的接口自动化测试框架搭建过程实战

    目录 前言 第一讲 框架结构简解 第二讲 测试接口服务 第三讲 配置文件读取 第四讲 读取Excel中的case 第五讲 发送requests请求 第六讲 参数动态化 第七讲 使用unittest断言 第八讲 HTMLTestRunner源
  • spring事件发布

    最近一个需求 接口监控异常 需要进行一连串逻辑处理 又新加需要给运维人员发短信 异步处理 不能影响源代码逻辑 因此用到事件发布器 在事件驱动中有三个比较重要的组件 Event 发布的事件对象 EventPublisher 事件发布对象 Ev
  • 姓名 抽奖 ppt 模板_PPT中制作姓名滚动抽奖小动画

    想看视频教程的直接拉到文章尾部观看 本次教程教大家如何简单制作姓名滚动抽奖的小动画 效果如下 进入幻灯片播放界面后 在页面任意位置单击鼠标即可开始抽奖 再单击一次鼠标暂停 再单击一次鼠标还可以重新开始 下面来看一下如何制作 制作过程中主要使
  • k8s之Ingress篇七层代理

    Ingress介绍 Ingress官网定义 Ingress可以把进入到集群内部的请求转发到集群中的一些服务上 从而可以把服务映射到集群外部 Ingress 能把集群内Service 配置成外网能够访问的 URL 流量负载均衡 提供基于域名访
  • Unity 连接WebSocket(ws://)服务器

    Unity 连接ws 不用任何插件 忙活了一天终于搞定了 一直连接不上 原来是没有添加header 代码比较简单 直接贴出来普度众生 using System using System Net WebSockets using System
  • 爬虫学习心得

    在python环境中对小说进行爬取 一般需要安装爬虫所需的第三方库 目前我所使用的为BS4和Requests BS4库安装 Beautiful Soup 简称 BS4 其中 4 表示版本号 是一个 Python 第三方库 它可以从 HTML
  • 图解通信原理与案例分析-13:无线对讲机案例--频率调制实现语音点对点无线通信

    前言 在 无线调幅广播案例 中 拆解了通过幅度调制AM实现点对多点广播通信的基本原理 本文 将通过无线对讲机的案例 拆解了通过频率调制FM实现点对多点广播通信的基本原理 本文的重点在 1 频率调制与解调的基本原理 2 频率调制与幅度调制的本
  • nvm常用命令有哪些?nvm如何切换node版本?nvm如何下载node?nvm安装包

    之前公司有很多老项目 需要切换node低版本才能正常使用 但是还有使用node高版本新项目 总不能每次更换项目就卸载重装对应版本的node 所以就使用了nvm来管理node版本 每次使用时 nvm命令就记得很清楚 可是长时间不使用 就会有点
  • Java方法的重载

    方法的重载 函数名相同 形式参数不同 方法重载的规则 1 方法名称必须相同 2 参数列表必须不同 个数 或者 参数类型 或者 排列顺序 3 方法的返回类型可以相同也可以不相同 4 仅仅返回类型不同不足以成为方法的重载 方法名称相同时 编译器
  • C++实践之Qt学习(五):Qt设计器介绍、信号和槽机制

    文章目录 Qt设计器 对象树 信号和槽 信号和槽机制 设计器上添加信号与槽 方式1 方式2 Qt设计器 分为几个区域 控件 部件区 界面编辑区 动作编辑 信号槽编辑区 对象区 对象属性区 部件区又分为几类 Layouts 布局 Spacer
  • 图像综合处理小设计实验—opencv背景分割,硬币检测

    图像综合处理小设计 opencv背景分割 硬币检测 一 机器视觉图像的目标与背景的分割与提取 1 主要要求 对输入图像可以达到目标和背景的分割 建议方法 1 将已知图像进行消噪处理 2 对彩色图像进行目标和背景分析 3 通过阈值法将图像进行