Opencv数一数有多少个水晶贴纸?

news2025/4/27 6:10:15

1.目标-数出有多少个贴纸

好久没更新博客了,最近家里小朋友在一张A3纸上贴了很多水晶贴纸,要让我帮他数有多少个,看上去有点多,贴的也比较随意,于是想着使用Opencv来识别一下有多少个。

原图如下: 

代码:

import cv2
import numpy as np
from matplotlib import pyplot as plt


def count_stars(image_path):
    # 读取图像
    image = cv2.imread(image_path)

    # # 显示原始图像
    # plt.figure()
    # plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
    # plt.title('Original Image')

    # 转换为灰度图像
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # # 显示灰度图像
    # plt.figure()
    # plt.imshow(gray, cmap='gray')
    # plt.title('Gray Image')

    # 应用高斯模糊以减少噪声
    gs=85
    blurred = cv2.GaussianBlur(gray, (gs, gs), 0)

    # # 显示高斯模糊后的图像
    # plt.figure()
    # plt.imshow(blurred, cmap='gray')
    # plt.title('Blurred Image')
    # # plt.show()

    # 使用自适应阈值进行二值化
    binary = cv2.adaptiveThreshold(blurred, 255,
                                   cv2.ADAPTIVE_THRESH_MEAN_C,
                                   cv2.THRESH_BINARY_INV, 125, 2)

    # 显示二值化后的图像
    plt.figure()
    plt.imshow(binary, cmap='gray')
    plt.title('Binary Image')
    plt.show()

    # 查找轮廓
    contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL,
                                   cv2.CHAIN_APPROX_SIMPLE)

    # 绘制轮廓
    contour_image = np.copy(image)
    cv2.drawContours(contour_image, contours, -1, (0, 255, 0), 3)

    # 计数星星(即轮廓的数量)
    star_count = len(contours)
    # 显示带有轮廓的图像
    plt.figure()
    plt.imshow(cv2.cvtColor(contour_image, cv2.COLOR_BGR2RGB))
    plt.title('Image with Contours'+str(star_count))
    plt.show()

    return star_count

# 图像路径
image_path = '202406150928253.jpg'

# 计算星星数量
num_stars = count_stars(image_path)
print(f'Number of stars: {num_stars}')

2.使用原图计算效果

有很多斑点干扰了统计结果。

3.图像优化处理

对图像进行优化处理再进行计算。使用PS工具对图像背景进行去除。

PS处理之后的图(魔术橡皮擦擦掉背景)),有些透明水晶贴纸和背景色接近被处理了一部分。

最后的结果没有进行人工确认,不过看上去基本是正确的。有兴趣的朋友可以比对一下。

仔细看左上角有点问题,多了一些,擦除后重新计算得到209个,家里小朋友数的202个。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1825084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何应对pcdn的流量攻击?

面对PCDN的流量攻击,可以采取以下措施来应对: 一.配置防火墙: 1.禁止未授权的PCDN域名访问:根据网络需求,配置防火墙规则,只允许特定的PCDN域名进行访问,从而防止未经授权的PCDN节…

这份简历让一位程序员在谷歌获得30万美元

大家好,我是弗雷。每次都在让大家尝试走出职场,但今天我们却选择再次走进职场。 作为曾经的职场人,我深深明白简历的敲门砖作用,制作一份优质的简历至关重要。 你所见过的最优秀的简历是什么样子? 或者你想象中最优秀…

十大成长型思维:定位思维、商业思维、时间管理思维、学习成长思维、精力管理思维、逻辑表达思维、聚焦思维、金字塔原理、目标思维、反思思维

一、定位思维 定位思维是一种在商业和管理领域中至关重要的思维模式,它涉及到如何在顾客心智中确立品牌的独特位置,并使其与竞争对手区分开来。以下是关于定位思维的清晰介绍: 1、定义 定位思维是一种从潜在顾客的心理认知出发,通…

TrueNAS系统在ARM平台上的移植

随着家庭及中小型企业对存储和共享需求的日益增长,高效、可靠的文件存储系统成为支撑各类应用的关键。 在众多存储系统中,TrueNAS以其卓越的数据完整性与可靠性、简洁高效的应用程序部署和管理、灵活的虚拟化应用添加能力,以及出色的可用性&a…

汽车IVI中控开发入门及进阶(二十六):视频解码芯片ADV7180

前言: ADV7180芯片的功能框图如下: ADV7180自动检测并将兼容全球NTSC、PAL和SECAM标准的标准模拟基带电视信号转换为兼容8位ITU-R BT.656接口标准的4:2:2分量视频数据。 ADV7180芯片介绍: 简单的数字输出接口与各种MPEG编码器、编解码器、移动视频处理器以及Analog Devic…

Stable Diffusion 3 Medium 模型

开源SD3,中型版本,20亿参数,Stable Diffusion 3 Medium,系统内存要求32G,显卡6G。 a female character with long, flowing hair that appears to be made of ethereal, swirling patterns resembling the Northern Li…

嵌入式操作系统_3.操作系统内核架构

内核是操作系统的核心部分,它管理着系统的各种资源。内核可以看成连接应用程序和硬件的一座桥梁,是直接运行在硬件上的最基础的软件实体。目前从内核架构来划分,可分为宏内核(Monolithic Kernel)和微内核(M…

AI图书下载:《ChatGPT打造赚钱机器》

这本书《ChatGPT打造赚钱机器》(ChatGPT Money Machine 2024 The Ultimate Chatbot Cheat Sheet)是一本全面的指南,旨在帮助读者快速掌握如何利用ChatGPT等人工智能技术创造收益。 以下是各章节内容的总结: **引言** 介绍了人工智…

问题(05)elementui 输入框里面禁止浏览器自动填充用户名密码、弹出浏览器历史密码提示框

问题描述 el-input&#xff0c;非密码框&#xff0c;在输入时&#xff0c; 问题1&#xff1a; 浏览器自动填充用户名密码。问题2&#xff1a;右边显示浏览器历史密码提示框。 问题解决 问题1&#xff1a;使用auto-complete"new-password" <input type"te…

【git】 OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443

修改/etc/hosts文件&#xff0c;删掉以下 192.30.253.113 github.com 192.30.253.113 github.com 192.30.253.118 gist.github.com 192.30.253.119 gist.github.com #172.24.132.179 gerrit.sdp.nd 140.82.112.25 alive.github.com 140.82.114.6 api.github.com 185.199.110.15…

【CS.AL】算法核心之贪心算法:从入门到进阶

文章目录 1. 概述2. 适用场景3. 设计步骤4. 优缺点5. 典型应用6. 题目和代码示例6.1 简单题目&#xff1a;找零问题6.2 中等题目&#xff1a;区间调度问题6.3 困难题目&#xff1a;分数背包问题 7. 题目和思路表格8. 总结References 1000.1.CS.AL.1.4-核心-GreedyAlgorithm-Cre…

开放式耳机值得入手买吗?可以对比这几款开放式耳机看看

居家办公时&#xff0c;选择一款合适的耳机能够有效地提高工作效率。入耳式耳机虽然能够有效地隔绝外界噪音&#xff0c;但长时间佩戴会对耳朵造成负担&#xff0c;甚至引发耳道感染。而头戴式耳机虽然能够提供更好的音质&#xff0c;但体积较大&#xff0c;佩戴起来不够灵活。…

Opus从入门到精通(五)OggOpus封装器全解析

Opus从入门到精通(五)OggOpus封装器全解析 为什么要封装 前面Opus从入门到精通(四)Opus解码程序实现提到如果不封装会有两个问题: 无法从文件本身获取音频的元数据(采样率,声道数,码率等)缺少帧分隔标识,无法从连续的文件流中分隔帧(尤其是vbr情况) 针对上面的问题我们可以…

上位机图像处理和嵌入式模块部署(h750和市场上的开发板)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 目前在电商网站上面&#xff0c;关于h750的开发板很多。一种是某原子和某火出品的板子&#xff0c;这一类的板子就是做的比较大&#xff0c;功能比…

STM32单片机选型方法

一.STM32单片机选型方法 1.首先要确定需求&#xff1a; 性能需求&#xff1a;根据应用的复杂度和性能要求&#xff0c;选择合适的CPU性能和主频。 内存需求&#xff1a;确定所需的内存大小&#xff0c;包括RAM和Flash存储空间。 外设需求&#xff1a;根据应用所需的功能&…

秋招突击——6/14——复习{(树形DP)树的最长路径}——新作{非递归求二叉树的深度、重复区间合并}

文章目录 引言复习树形DP——树的最长路径 新作使用dfs非递归计算二叉树的深度多个区间合并删除问题实现思路实现代码参考思路 总结 引言 这两天可能有点波动&#xff0c;但是算法题还是尽量保证复习和新作一块弄&#xff0c;数量上可能有所差别。 复习 树形DP——树的最长路…

Vue使用vue-esign实现在线签名

Vue在线签名 一、目的二、样式三、代码1、依赖2、代码2.1 在线签名组件2.2父组件 一、目的 又来了一个问题&#xff0c;直接让我在线签名&#xff08;还不能存储base64&#xff09;&#xff0c;并且还得上传&#xff0c;我直接***违禁词。 二、样式 初始样式 点击前往组件&am…

el-tabl 表格行列转换(表头在左数据在右)

1 效果展示 1 空数据 2 有数据 2 完成代码 2.1 SchedulingTable.vue <template><div class="schedulingTable"><el-row :gutter="1" class="row-center"><el-col :span="3"><el-tag type="&quo…

4机器学习期末复习

在机器学习中&#xff0c;数据清洗与转换包括哪些内容&#xff1f; 对数据进行初步的预处理&#xff0c;需要将其转换为一种适合机器学习模型的表示形式对许多模型类型来说&#xff0c;这种表示就是包含数值数据的向量或者矩阵&#xff1a; 1&#xff09;将类别数据编码成为对…

C++ //CCF-CSP计算机软件能力认证 202406-1 矩阵重塑(其一)

CCF-CSP计算机软件能力认证 202406-1 矩阵重塑&#xff08;其一&#xff09; 题目背景 矩阵&#xff08;二维&#xff09;的重塑&#xff08;reshape&#xff09;操作是指改变矩阵的行数和列数&#xff0c;同时保持矩阵中元素的总数不变。 题目描述 矩阵的重塑操作可以具体…