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

如何使用OpenCV检测图像是否被应用了颜色滤镜?

如何用OpenCV检测图像是否被添加颜色滤镜

当然可以用OpenCV检测,给你两个适合新手的简单方法:

方法1:对比RGB通道的亮度均值

OpenCV读取图像默认是BGR格式,拆分后能拿到蓝、绿、红三个通道的像素数据。像你提供的红色滤镜图像,红通道的整体亮度会远高于绿、蓝通道,正常图像的三个通道均值会相对均衡。

代码示例:

import cv2
import numpy as np

# 替换成你的图像路径
img = cv2.imread("your_image.jpg")
# 拆分BGR三个通道
b_channel, g_channel, r_channel = cv2.split(img)

# 计算每个通道的平均亮度
avg_blue = np.mean(b_channel)
avg_green = np.mean(g_channel)
avg_red = np.mean(r_channel)

# 设定阈值判断(这里1.5可以根据实际情况调整)
if avg_red > avg_green * 1.5 and avg_red > avg_blue * 1.5:
    print("图像大概率应用了红色滤镜")
else:
    print("图像无明显红色滤镜特征")

方法2:用HSV颜色空间检测特定颜色占比

HSV空间对颜色的区分更直观,红色对应的色相(H通道)范围是0-10和170-180。统计图像中属于红色区间的像素占比,就能判断是否加了红色滤镜。

代码示例:

import cv2
import numpy as np

img = cv2.imread("your_image.jpg")
# 把BGR转成HSV格式
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 定义红色的HSV范围(饱和度和明度可以根据情况微调)
lower_red1 = np.array([0, 50, 50])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([170, 50, 50])
upper_red2 = np.array([180, 255, 255])

# 生成红色区域的掩码
mask_red1 = cv2.inRange(hsv_img, lower_red1, upper_red1)
mask_red2 = cv2.inRange(hsv_img, lower_red2, upper_red2)
total_red_mask = mask_red1 + mask_red2

# 计算红色像素占总像素的比例
red_ratio = np.sum(total_red_mask > 0) / (img.shape[0] * img.shape[1])

# 比如占比超过30%就判定有红色滤镜
if red_ratio > 0.3:
    print("图像大概率应用了红色滤镜")
else:
    print("图像无明显红色滤镜特征")

小提示

  • 如果图像本身红色元素很多,建议找同场景的正常图像做对比,看通道均值或颜色占比的差异。
  • 要是遇到复杂的多颜色滤镜,可能需要对比图像的直方图(正常图像和滤镜图像的直方图形状会有明显差异)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:40:25