【发布时间】:2023-03-31 22:20:02
【问题描述】:
我知道这里已经提出了一些问题,但它们并没有帮助我解决我的问题。我将不胜感激任何帮助解决我的问题。 我是opencv的新手。
我有一个image 并应用一些代码从图像中获取轮廓。现在我想从检测到的轮廓中获取 RGB 颜色值。我该怎么做?
我对它进行了研究,发现它可以通过使用轮廓来解决,所以我尝试实现轮廓,现在最后我想获得轮廓的颜色值。
这是我的代码:
import cv2
import numpy as np
img = cv2.imread('C:/Users/Rizwan/Desktop/example_strip1.jpg')
img_hsv = cv2.cvtColor(255-img, cv2.COLOR_BGR2HSV)
lower_red = np.array([40, 20, 0])
upper_red = np.array([95, 255, 255])
mask = cv2.inRange(img_hsv, lower_red, upper_red)
contours, _ = cv2.findContours(mask, cv2.RETR_TREE,
cv2.CHAIN_APPROX_SIMPLE)
color_detected_img = cv2.bitwise_and(img, img, mask=mask)
print(len(contours))
for c in contours:
area = cv2.contourArea(c)
x, y, w, h = cv2.boundingRect(c)
ax = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 0), 2)
rect = cv2.minAreaRect(c)
box = cv2.boxPoints(rect)
box = np.int0(box)
im = cv2.drawContours(color_detected_img, [box], -1, (255, 0, 0), 2)
cv2.imshow("Cropped", color_detected_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
我希望输出应该是轮廓内检测到的颜色的 RGB 值。
【问题讨论】:
-
1) 为什么在转换为 HSV 颜色空间之前“反转”输入图像:
img_hsv = cv2.cvtColor(255-img, cv2.COLOR_BGR2HSV)? 2)你期望输出是什么样的?像某种直方图?像素特定的 RGB 值(如 JUST 像素)? -
我反转图像以检测两条彩色线,如图所示(两条红线)。如果这不是一个好方法,那么请帮助我改进它。我想要像素特定的 RGB 值,例如 [183, 172, 167]
-
用于选择“正确的”HSV 颜色范围:在one of my answers to an earlier question 中有一个简短的介绍。查看您的输入图像,我非常怀疑您是否可以准确地提取第二个较轻的条纹,并至少保持一些代码的通用性。如果您设置了适当的红色范围,则可以找到第一个更存在的条纹,可能位于色相光谱的“紫色末端”(有关进一步说明,请参阅链接)。
-
好的,那很好,您能否提供我的问题的解决方案,例如如何从 opencv 中的轮廓内部获取 rgb 值?谢谢