基于OpenCV简易检测硬币个数

2023-10-27

背景:在我们生活中常常需要我们用肉眼来计算某些物品的数量,如果通过人工操作会产生:①.效率低下;②.长时间的工作会导致眼睛疲劳导致错误的计算;为此,我们可以使用图像处理来检测方便我们.

代码如下:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

Mat srcImage; //源图
Mat dstImage; //目标图
Mat grayImage;//灰度图
int Coin = 0; //硬币个数

string intToString(int number)
{
    ostringstream ss;
    ss << number;
    return ss.str();
}

int main()
{
    //载图
    srcImage = imread("D:/photoes/coin.png");
    if (srcImage.empty())
    {
        cout << "fail to read the Image!" << endl;
        return -1;
    }
    //色彩空间转换
    cvtColor(srcImage, grayImage,COLOR_BGR2GRAY);
    //平滑滤波降噪
    blur(grayImage, dstImage,Size(3,3));
    //    imshow("平滑降噪",dstImage);
    //使用大津法阈值分割前景与背景
    threshold(dstImage,dstImage,0,255,THRESH_OTSU);
    //    imshow("阈值分割",dstImage);
    //孔洞填充
    //floodFill(dstImage,Point(0,0),Scalar(255));
    //imshow("空洞填充",dstImage);
    
    vector<vector<Point>> contours;
    vector<Vec4i> hierarchy;    
    findContours(dstImage,contours,hierarchy,RETR_EXTERNAL,CHAIN_APPROX_SIMPLE);
    vector<vector<Point>> contours_poly(contours.size());
    for (int i = 0; i < contours.size(); i++)
    {
        approxPolyDP(contours[i], contours_poly[i], 3, true);
        //drawContours(dstImage, contours_poly, i, Scalar(255));
        Point2f center;
        float radius;
        minEnclosingCircle(contours_poly[i], center, radius);
        if (radius < 20)
            continue;
        circle(dstImage,center,radius,Scalar(255),4);
        circle(srcImage, center, radius, Scalar(0,0,255), 1);
        Coin++;
    }
    //imshow("找轮廓填轮廓",dstImage);
    string text = "detected coin's number:" + intToString(Coin);
    int fontFace = FONT_HERSHEY_COMPLEX;
    double fontScale = 1;
    int thickness = 1;

    Size textSize = getTextSize(text, fontFace, fontScale, thickness, 0);
    Point org = Point(0, textSize.height);
    putText(srcImage, text, org, fontFace, fontScale, Scalar(0,0,255), 1, 8);

    imshow("原始图", srcImage);
    waitKey(0);
}    
 

效果图:

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

基于OpenCV简易检测硬币个数 的相关文章

  • 在 Python 3.5 64 位上通过 pip 安装 OpenCV

    我尝试安装 OpenCV 但找不到任何合适的 pip 软件包 我决定上网查找有关如何安装它的官方文档 并发现this https opencv python tutroals readthedocs io en latest py tuto
  • Opencv未找到所有轮廓

    我试图找到该图像的轮廓 但是该方法查找轮廓只返回1轮廓 轮廓突出显示image 2 我正在努力寻找all外部轮廓就像这些圆圈 里面有数字 我究竟做错了什么 我可以做什么来实现它 image 1 image 2 以下是我的代码的相关部分 th
  • 在 QtCreator 中将 OpenCV 2.3 与 Qt 结合使用

    随着 OpenCV 2 3 版本终于发布 我想在我的系统上编译并安装这个最新版本 由于我经常使用 Qt 和 QtCreator 我当然希望能够在我的 Qt 项目中使用它 我已经尝试了几种方法几个小时 但总是出现错误 第一次尝试 使用WITH
  • Python中最相似的人脸识别

    如何使用Python和OpenCV来查找面部相似 我已成功使用 OpenCV 和 Python 使用 Haar Cascades 从多张照片中提取人脸 我现在有一个图像目录 所有这些都是不同人的面孔 我想做的是拍摄一张样本图像 然后看看它最
  • 曲线/路径骨架二值图像处理

    我正在尝试开发一个可以处理图像骨架的路径 曲线的代码 我想要一个来自两点之间骨架的点向量 该代码在添加一些点后结束 我没有找到解决方案 include opencv2 highgui highgui hpp include opencv2
  • 多视图几何

    我从相距一定距离的两台相同品牌的相机捕获了两张图像 捕获了相同的场景 我想计算两个相机之间的现实世界旋转和平移 为了实现这一点 我首先提取了两张图像的 SIFT 特征并进行匹配 我现在有基本矩阵也单应性矩阵 然而无法进一步进行 有很多混乱
  • 无法在 Windows 7 机器中使用 OpenCV 2.4.3、Python 2.7 打开“.mp4”视频文件

    我目前正在进行一个涉及读取 mp4 视频文件的项目 我遇到的问题是它在Windows 7机器上使用Python 2 7 32位 OpenCV 2 4 3 cv2 pyd 代码片段如下 try video cv2 VideoCapture v
  • opencv 2.3.* 读取不工作

    我无法让 imread 工作 与这个人有同样的问题 OpenCV imwrite 2 2 在 Windows 7 上导致异常 并显示消息 OpenCV 错误 未指定错误 无法找到指定扩展名的编写器 https stackoverflow c
  • 如何在 OpenCV 中从 YUV 文件读取帧?

    如何在 OpenCV 中从 YUV 文件读取帧 我编写了一个非常简单的 python 代码来从二进制文件读取 YUV NV21 流 import cv2 import numpy as np class VideoCaptureYUV de
  • 使用 ffmpeg 或 OpenCV 处理原始图像

    看完之后维基百科页面 http en wikipedia org wiki Raw image format原始图像格式 是任何图像的数字负片 为了查看或打印 相机图像传感器的输出具有 进行处理 即转换为照片渲染 场景 然后以标准光栅图形格
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • ffmpeg AVFrame 到 opencv Mat 转换

    我目前正在开发一个使用 ffmpeg 解码接收到的帧的项目 解码后 我想将 AVFrame 转换为 opencv Mat 帧 以便我可以在 imShow 函数上播放它 我拥有的是字节流 我将其读入缓冲区 解码为 AVFrame f fope
  • 如何使用 python、openCV 计算图像中的行数

    我想数纸张 所以我正在考虑使用线条检测 我尝试过一些方法 例如Canny HoughLines and FLD 但我只得到处理过的照片 我不知道如何计算 有一些小线段就是我们想要的线 我用过len lines or len contours
  • uri 警告中缺少端口:使用 Python OpenCV cv2.VideoCapture() 打开文件时出错

    当我尝试流式传输 ipcam 时 出现了如下所示的错误 tcp 000000000048c640 uri 中缺少端口 警告 打开文件时出错 build opencv modules videoio src cap ffmpeg impl h
  • 如何使用 opencv python 计算乐高积木上的孔数?

    我正在开发我的 python 项目 我需要计算每个乐高积木组件中有多少个孔 我将从输入 json 文件中获取有关需要计算哪个程序集的信息 如下所示 img 001 red 0 blue 2 white 1 grey 1 yellow 1 r
  • iOS 上的 OpenCV - VideoCapture 属性始终返回 1

    我一直在尝试构建一个简单的 OpenCV iOS 应用程序 该应用程序从捆绑包中加载视频并查询其帧数 持续时间等 然后它将尝试从中获取各个帧 不幸的是 当我使用VideoCapture类中 所有属性返回值 1 然后我尝试导航到frame 1
  • 在 Python 中将 OpenCV 帧流式传输为 HTML

    我正在尝试从 opencv Pyt hon 中的 URL 读取视频 然后逐帧处理它 然后将其发送到 HTML 页面 But I am only getting the first frame after that the program g
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • OpenCV:如何从网络摄像头获取原始 YUY2 图像?

    你知道如何获得吗raw YUY2来自网络摄像头的图像 使用 OpenCV DirectShow 无 VFW http opencv willowgarage com wiki CameraCapture http opencv willow
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • antd-design/pro-table组件说明(官方readme)

    ant design pro table Antd官网没找到Pro Table的相关说明文档 下面是从依赖包里捞出来的readme Demo codesandbox API pro table 在 antd 的 table 上进行了一层封装
  • 洛谷 贪心 部分背包 线段覆盖 排队接水 python

    P2240 深基12 例1 部分背包问题 数据结构选择 python没有结构体 选用二维数组 物品价值 重量 存储单个物品方便排序 根据贪心策略 首先计算性价比 然后按性价比由大到小排序 只要没有达到背包承载的重量 就装入 python n
  • 第八章 综合案例——构建DVD租赁商店数据仓库①

    8 3 2 加载日期数据至日期维度表 1 打开Kettle工具 创建转换 使用Kettle工具 创建一个转换load dim date 并添加生成记录控件 增加序列控件 JavaScript代码控件 表输出控件以及Hop跳连接线 2 配置
  • 用作者提供的net1->net2生成MTCNN的训练样本(positive,negative,part,landmark)

    本代码基于作者提供的python版本代码修改 参考 https github com DuinoDu mtcnn blob master demo py 作者提供 https github com dlunion mtcnn blob ma
  • C++中pair使用详细说明

    一 pair 的介绍 pair 是一个很实用的 小玩意 当想要将两个元素绑在一起作为一个合成元素 又不想要因此定义结构体时 使用 pair 可以很方便地作为一个代替品 也就是说 pair 实际上可以看作一个内部有两个元素的结构体 且这两个元
  • Python轻量级Web框架Flask(3)——Flask路由参数/Flask请求与响应/重定项/异常处理

    1 Flask路由参数和methods参数 路由其实就是一个路径 就是 a route template test 中的 template test 每一个路由对应的是唯一的一个功能 如果要实现很多个功能 就需要很多个路由 methods参
  • #992: invalid macro definition: USE_STDPERIPH_DRIVER.STM32F10X_MD问题解决方法

    现像 在进行STM32进行建立工程过程中 进行编译后出现如下报错 no source Error command line 992 invalid macro definition USE STDPERIPH DRIVER STM32F10
  • 我的NVIDA开发者之旅-在GPU上运行Pytorch代码

    我的NVIDIA开发者之旅 征文活动进行中 目录 介绍 查看GPU信息 Pytorch指定显卡 Demo 参考 介绍 Pytorch与CUDA的安装可以参照我之前写的深度学习环境搭建 Windows10安装cuDNN Pytorch能够使用
  • Linux网络基础5(链路层---以太网)

    链路层 负责相邻设备之间的数据传输 以太网协议 ethernet 协议格式 48位源端 对端mac地址 识别指定相邻设备 mac地址 uint8 t mac 6 网卡的物理硬件地址 在出厂时设定 16位数据类型 用于数据分用时上层解析协议的
  • Kettle 将文本文件转为excel输出

    关注微信公共号 小程在线 关注CSDN博客 程志伟的博客 一 将文本文件转为excel输出 1 选择打开 新建转换 2 点击文本文件输入 3 点击浏览 找到我们需要的文本文件 4 选择好之后点击增加 5 显示文件的具体路径 6 点击 显示文
  • html中img标签特性及块元特性

    img特性 1 img不会独占一行 一行可以放多个 2 img是行内元素 但具有行内块属性 可以自由设置宽高 这种内容可替换的元素 虽然属于 inline 但又能设置height width等值 块元素特性 1 每一个块级元素都是独占一行
  • ajax可以做哪些事,Ajax

    1 ajax 是什么 有什么作用 ajax主要是实现页面和web服务器之间数据的异步传输 不采用ajax的页面 当用户在页面发起请求时 就要进行整个页面的刷新 刷新快慢取决于服务器的处理快慢 在这个过程中用户必须得等待 不能进行其他操作 采
  • Typora 远程代码执行漏洞(CVE-2023-2317)

    1 漏洞介绍 Typora是一款编辑器 Typora 1 6 7之前版本存在安全漏洞 该漏洞源于通过在标签中加载 typora app typemark updater update html 可以在Typora主窗口中加载JavaScri
  • Nginx:配置worker进程的所属用户

    Nginx的配置文件 etc nginx nginx conf中定义了启动worker时的所属用户 全局块 user www data worker进程的所属用户 nginx默认设置为www data 但如果该用户配置的不正确 可能造成业务
  • 【Python 实战】---- 批量对图片添加不同水印

    1 需求 多水印 多图片 对图片和水印进行一一对应的批量添加 2 效果对比 加水印前和加水印后 3 开发思路 由于水印是多个 同时图片也是多个 所以考虑使用excel对他们进行配置 好一一对应 字体的获取 不同文字的字体不同 水印显示的位置
  • 常见的六大聚类算法

    1 K Means K均值 聚类 算法步骤 1 首先我们选择一些类 组 并随机初始化它们各自的中心点 中心点是与每个数据点向量长度相同的位置 这需要我们提前预知类的数量 即中心点的数量 2 计算每个数据点到中心点的距离 数据点距离哪个中心点
  • Kubernetes CKA考试和真题(中)

    前言 上一篇文章分享了CKA考试和前5个题目及其解答 这一篇继续分享6 10题 第六题 使用service暴露应用 题目 重新配置现有的deployment front end 以及添加名为http的端口规范来公开现有的容器nginx的端口
  • 深入剖析Vue源码 - 完整渲染过程

    继上一节内容 我们将Vue复杂的挂载流程通过图解流程 代码分析的方式简单梳理了一遍 其中也讲到了模板编译的大致流程 然而在挂载的核心处 我们并没有分析模板编译后函数如何渲染为可视化的DOM节点 这一节 我们将重新回到Vue实例挂载的最后一个
  • C语言程序设计博客作业04

    这个作业要求在哪里 https pintia cn problem sets 1595556701053566976 我在这个课程的目标是 了解函数 然后会运用函数 这个作业在那个具体方面帮助我实现目标 基础题然我了解了函数使用时的一些格式
  • 基于OpenCV简易检测硬币个数

    背景 在我们生活中常常需要我们用肉眼来计算某些物品的数量 如果通过人工操作会产生 效率低下 长时间的工作会导致眼睛疲劳导致错误的计算 为此 我们可以使用图像处理来检测方便我们 代码如下 include