从橙色动态检测红色的阈值方法
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)
我希望能够动态地将图像上的橙色部分与红色部分分开。目前我正在使用范围,但范围的问题是它们是固定的,并且图像质量可能会很差,橙色部分变得更红一点,或者红色部分变得更橙色一点,但这些部分仍然存在仍然可以用肉眼识别和区分。我正在考虑使用一个阈值来动态确定这些颜色,但我做不到。你对我有什么想法吗?
可能会出现图像质量较差并且红色部分不再那么红的情况,但在此之前您仍然可以很好地区分不同的部分。然后当我尝试你的回答时,它并没有完全按照它应该做的去做。
如果您有干净的图像,例如提供的没有嘈杂背景的图像,并且您想要将颜色 红色 和 橙色 分开是 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)