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

如何使用OpenCV移除图片中指定的米色,保留其余目标彩色区域

代码失效原因及修复方案

核心问题

  1. OpenCV的cv2.imread接口默认以BGR通道顺序读取图像,你设置的阈值参数是RGB数值,直接传入cv2.inRange会因为通道不匹配,无法正确筛选米色区域。
  2. 代码中生成了形态学处理后的morph变量,但后续掩码生成仍然使用原始的thresh,形态学修复噪点、连接区域的效果完全没有生效。

修正后的可运行代码

import cv2 
import numpy as np

# 读取图像
img = cv2.imread(r'D:\PY\mk1\mk1\sagitale1.png')
# 转换为RGB通道,匹配阈值设置
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 定义米色区域的RGB上下阈值,可根据实际效果微调
lower = np.array([101, 69, 51])
upper = np.array([255, 171, 142])

# 筛选米色区域生成阈值图
thresh = cv2.inRange(img_rgb, lower, upper)

# 形态学处理,消除小噪点、补全区域断裂
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(20,20))
morph = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

# 反转掩码,保留非米色的其他区域
mask = 255 - morph

# 掩码作用到原始BGR图像,生成结果
result = cv2.bitwise_and(img, img, mask=mask)

# 保存结果
cv2.imwrite('1_thresh.jpg', thresh)
cv2.imwrite('1_result.jpg', result)

# 显示结果
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

调试建议

如果米色区域筛选不完整或误删了需要保留的区域,可以直接取图像中米色区域的像素RGB值,调整lower和upper的参数即可。

内容的提问来源于stack exchange,提问作者Túlio Brandão Xavier Rocha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:15:07