自动检测曲别针数量:图像处理技术的应用

引言

在这篇博客中,我们将探讨如何使用计算机视觉技术自动检测图像中曲别针的数量。
如图:
请添加图片描述

[1]使用灰度转换

由于彩色信息对于曲别针计数并不重要,我们将图像转换为灰度图,这样可以减少处理数据的复杂度,加速后续的图像处理步骤。

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

[2]二值化处理

通过应用二值化处理,我们将灰度图转换为黑白图像。在这个步骤中,图像中的所有像素点要么是黑色,要么是白色,这简化了轮廓的检测。

_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
  • 二值化后的图片:
    在这里插入图片描述

[3]轮廓检测

使用OpenCV的findContours函数,我们从二值图像中提取轮廓。这些轮廓代表潜在的曲别针。

# 查找轮廓
contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 遍历轮廓并计算面积
for contour in contours:
    cv2.drawContours(image, [contour], -1, (0, 255, 0), 2)

但是这边我们可以看到很多不必要的内容都被放进来了,所以我们接着进行进一步操作。
在这里插入图片描述

[4]面积过滤和计数

为了区分真正的曲别针和其他噪声,我们计算每个轮廓的面积,并只统计那些面积超过预设阈值的轮廓。这一步骤帮助我们准确地识别和计数曲别针。

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

# 初始化计数器
large_contour_count = 0
min_area = 10000  # 设置面积阈值,根据实际情况调整

# 遍历轮廓并计算面积
for contour in contours:
    area = cv2.contourArea(contour)
    if area > min_area:
        large_contour_count += 1
        cv2.drawContours(image, [contour], -1, (0, 255, 0), 2)  # 绘制满足条件的轮廓
  • 效果:
    在这里插入图片描述
    可以看出确实正确的识别出曲别针的数量
    在这里插入图片描述

完整代码

import cv2

# 加载图像
image = cv2.imread('./images/nums.jpg')
cv2.imshow("Original", image)

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

# 应用二值化阈值
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
cv2.imshow("Binary", binary)

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

# 初始化计数器
large_contour_count = 0
min_area = 10000  # 设置面积阈值,根据实际情况调整

# 遍历轮廓并计算面积
for contour in contours:
    area = cv2.contourArea(contour)
    if area > min_area:
        large_contour_count += 1
        cv2.drawContours(image, [contour], -1, (0, 255, 0), 2)  # 绘制满足条件的轮廓

# 显示图像
cv2.imshow('Contoured Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 输出符合条件的曲别针数量
print(f"曲别针数量为: {large_contour_count}")

相关推荐

  1. 图像处理领域应用

    2024-06-11 15:28:02       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-11 15:28:02       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-11 15:28:02       97 阅读
  3. 在Django里面运行非项目文件

    2024-06-11 15:28:02       78 阅读
  4. Python语言-面向对象

    2024-06-11 15:28:02       88 阅读

热门阅读

  1. 徐州服务器租用的费用如何?

    2024-06-11 15:28:02       32 阅读
  2. i18next国际化(react)

    2024-06-11 15:28:02       27 阅读
  3. qt+ffmpeg实现视频转码功能(亲测好用)

    2024-06-11 15:28:02       32 阅读
  4. TensorFlow 的基本概念和使用场景

    2024-06-11 15:28:02       28 阅读
  5. 一些科学方法的总结

    2024-06-11 15:28:02       25 阅读
  6. 【Dify系列文章——Redis介绍】

    2024-06-11 15:28:02       25 阅读
  7. 设计与实现完整的余额充值系统

    2024-06-11 15:28:02       30 阅读
  8. Web前端开发学习内容:深入探索与全方位掌握

    2024-06-11 15:28:02       27 阅读
  9. C++算法——选择排序

    2024-06-11 15:28:02       27 阅读