从橙色动态检测红色的阈值方法

Threshold method to detect dynamically red from orange

我希望能够动态地将图像上的橙色部分与红色部分分开。目前我正在使用范围,但范围的问题是它们是固定的,并且图像质量可能会很差,橙色部分变得更红一点,或者红色部分变得更橙色一点,但这些部分仍然存在仍然可以用肉眼识别和区分。我正在考虑使用一个阈值来动态确定这些颜色,但我做不到。你对我有什么想法吗?

可能会出现图像质量较差并且红色部分不再那么红的情况,但在此之前您仍然可以很好地区分不同的部分。然后当我尝试你的回答时,它并没有完全按照它应该做的去做。

如果您有干净的图像,例如提供的没有嘈杂背景的图像,并且您想要将颜色 红色橙色 分开是 Red + Green,我建议在 green channel 上做 thresholding 两者之间的区别可以很好地看到颜色:

import cv2
import numpy as np

img = cv2.imread('input.png')
green = img[...,1]

mask = cv2.threshold(green, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

Orange = cv2.bitwise_and(img, img, mask = mask)

Red = img - Orange

res = np.concatenate((Orange, Red), axis=1)

cv2.namedWindow('Result', cv2.WINDOW_NORMAL)
cv2.imshow('Result', res)
cv2.waitKey(0)