当前位置: 首页 > news >正文

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

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

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

原图如下: 

代码:

import cv2
import numpy as np
from matplotlib import pyplot as pltdef 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=85blurred = 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.lryc.cn/news/373014.html

相关文章:

  • AI Agent智能应用从0到1定制开发(完结)
  • 事件驱动架构:新时代的软件设计范式
  • 【机器学习】机器学习与物流科技在智能配送中的融合应用与性能优化新探索
  • web前端何去何从:探索未来之路
  • yolov8通过训练完成的模型生成图片热力图--论文需要
  • Java数据结构之ArrayList(如果想知道Java中有关ArrayList的知识点,那么只看这一篇就足够了!)
  • Zadig vs. Jenkins 详细比较
  • 航拍无人机像素坐标转世界坐标
  • Linux系统学习——指令二
  • 【逻辑回归】和【线性回归】的区别和联系-九五小庞
  • 富格林:正视欺诈阻挠交易被骗
  • 如何在WPS中加载EndNote X9插件
  • vb.net小demo(计算器、文件处理等/C#也可看)
  • 【vue3|第8期】深入理解Vue 3 computed计算属性
  • 《精通ChatGPT:从入门到大师的Prompt指南》附录C:专业术语表
  • YOLOv8可视化界面PYQT5
  • 远程代码执行和远程命令执行是一个东西吗
  • C++ 20新特性之线程与jthread
  • 赶紧收藏!2024 年最常见 20道并发编程面试题(七)
  • HAL库开发--第一盏灯
  • Linux C语言:变量的作用域和生命周期(auto、register、static和extern)
  • AI Stable diffusion 报错:稳定扩散模型加载失败,退出
  • [Python学习篇] Python循环语句
  • MongoDB 正则表达式
  • Django配置连接池:使用django-db-connection-pool配置连接池
  • SpringBoot整合钉钉实现消息推送
  • 【机器学习】集成学习方法:Bagging与Boosting的应用与优势
  • 工业 web4.0 的 UI 卓越非凡
  • C语言 | Leetcode C语言题解之第145题二叉树的后序遍历
  • 如何在 Vue 3 中使用 vue3-print-nb 实现灵活的前端打印