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

HSV色彩空间中像素色相通道绝对差值计算异常问题求助

HSV色彩空间中像素色相通道绝对差值计算异常问题求助

前言/问题说明

我正在尝试对比HSV色彩空间中两个像素的数值,并计算它们的绝对差值。目前代码对S和V通道的计算看起来都没问题,但H通道大部分时候结果正常,偶尔会出现完全不合理的数值。

我的具体处理流程是:

  • 读取目标视频文件
  • 在第一帧中通过模板匹配找到特定位置,保存该位置的HSV像素值
  • 逐帧遍历视频,捕获同一位置的HSV像素值
  • 计算前后两个像素各通道的差值

我的猜想

我感觉自己对HSV色彩空间的某些特性理解有误。之前查资料后,针对H通道(范围0-360)和V通道(范围0-255),我用了取最小值的方式来计算合理差值——比如H通道取min(abs(p1-p2), 360-abs(p1-p2)),V通道做类似处理,但H通道还是偶尔会出现错误结果。

我的代码

import cv2 as cv
import numpy as np
import pyautogui
import time

tilling_target = cv.imread("tilling_target7.png")
tilling_target = np.array(tilling_target)
cap = cv.VideoCapture("video.mp4")

# Move to starting Lure Position
ret, frame = cap.read()
lure_location = cv.matchTemplate(
    frame, 
    tilling_target,
    cv.TM_CCOEFF_NORMED
)
# 注:此处原代码中`location`变量未定义,推测应为`lure_location`,属于笔误
loc_arr = np.array(location)

min_val, max_val, min_loc, max_loc = cv.minMaxLoc(loc_arr)
print(max_loc)
frameHSV = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
urpixel = frameHSV[max_loc[1]+20, max_loc[0]-40]
start_time = time.time()

# Watch the lure and changes
while True:
    ret, frame = cap.read()
    frameHSV = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
    pixel = frameHSV[max_loc[1]+20, max_loc[0]-40]
    print("urpixel:",urpixel) 
    print("pixel:",pixel)
    print("time:",time.time()-start_time)
    dif_to_urpixel = [min(abs(pixel[0]-urpixel[0]), 360-abs((pixel[0]-urpixel[0]))), abs(pixel[1]-urpixel[1]), min(abs(pixel[2]-urpixel[2]), 255-abs(pixel[2]-urpixel[2]))]
    print("differenz:",dif_to_urpixel)
    print("sum diff:", sum(dif_to_urpixel))

输出片段

urpixel: [100 114  65]
pixel: [101 138  63]
time: 3.048245668411255
differenz: [1, 24, 1] --> working as intended
sum diff: 26

urpixel: [100 114  65]
pixel: [ 99 124  74]
time: 3.2529683113098145
differenz: [105, 10, 9] --> 100-99 should result in 1 and not 105??
sum diff: 124

urpixel: [100 114  65]
pixel: [101 143  57]
time: 6.2827301025390625
differenz: [1, 29, 7] --> working as intended
sum diff: 37

urpixel: [100 114  65]
pixel: [ 99 134  57]
time: 5.828529596328735
differenz: [105, 20, 7] --> Again resulting in 105 instead of 1
sum diff: 132

备注:内容来源于stack exchange,提问作者Manni Manno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:30:27