You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV实现图像峰值检测与定位:自动识别红色点坐标

解决OpenCV自动检测曲线峰值并标记的方案

思路分析

你的需求是检测蓝色曲线的峰值(最顶端的点),模板匹配不适用是因为它需要固定模板,我们可以直接通过图像分析定位极值点:

  1. 提取图像中的蓝色曲线区域
  2. 在曲线区域中找到纵向坐标最小的点(图像坐标系y轴向下,y值越小位置越靠上,对应曲线峰值)
  3. 在原图上标记红色点

完整代码

import cv2
import numpy as np

# 读取输入图像
img = cv2.imread('z4OvN.png')
# 复制原图用于绘制标记
result_img = img.copy()

# 转灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化提取蓝色曲线(背景白色灰度高,曲线蓝色灰度低,取小于240的区域)
_, binary = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY_INV)

# 找到所有曲线像素的坐标
y_coords, x_coords = np.where(binary == 255)

# 找到y坐标最小的点(对应曲线最顶端,即峰值)
min_y_idx = np.argmin(y_coords)
peak_x = x_coords[min_y_idx]
peak_y = y_coords[min_y_idx]

# 在原图上绘制红色圆点(半径5,厚度-1填充)
cv2.circle(result_img, (peak_x, peak_y), 5, (0, 0, 255), -1)

# 保存结果或显示
cv2.imwrite('peak_marked.png', result_img)
cv2.imshow('Peak Marked', result_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码说明

  • 图像预处理:转灰度图后用二值化提取曲线,240是适配当前图像的阈值,背景白色灰度接近255,蓝色曲线灰度更低,THRESH_BINARY_INV会把曲线区域转为白色、背景转为黑色,方便后续提取坐标。
  • 定位峰值:通过np.where获取所有曲线像素的坐标,找到y坐标最小的点,就是曲线的峰值位置。
  • 标记峰值:用cv2.circle绘制红色实心圆点完成标记。

注意事项

  • 如果图像背景或曲线颜色有变化,可调整二值化的阈值(240),确保准确提取曲线区域。
  • 若存在多个局部峰值,可按x轴分段,分别查找每段的最小y值点来定位多个峰值。

内容的提问来源于stack exchange,提问作者newTOcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 20:15:47