我知道这里已经提出了一些问题,但是它们并没有帮助我解决问题。我将感谢您为解决我的问题提供的任何帮助。 我是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值。
答案 0 :(得分:0)
正如评论中所问,这是一种可能的解决方案,用于从预先发现的轮廓内的图像像素中提取BGR(!)值。如注释中所述,此处省略了对所需的彩色条纹的正确检测。
具有图像和轮廓填充的蒙版(例如来自cv2.drawContours
的轮廓),我们可以通过将(最有可能的uint8
)蒙版转换为{{来使用NumPy的boolean array indexing 1}}数组。
这是一个简短的代码段,它使用NumPy的savetxt
将所有值存储在某个bool_
文件中:
txt
虚拟图像如下:
虚拟轮廓蒙版如下:
生成的import cv2
import numpy as np
# Some dummy image
img = np.zeros((100, 100, 3), np.uint8)
img = cv2.rectangle(img, (0, 0), (49, 99), (255, 0, 0), cv2.FILLED)
img = cv2.rectangle(img, (50, 0), (99, 49), (0, 255, 0), cv2.FILLED)
img = cv2.rectangle(img, (50, 50), (99, 99), (0, 0, 255), cv2.FILLED)
# Mask of some dummy contour
mask = np.zeros((100, 100), np.uint8)
mask = cv2.fillPoly(mask, np.array([[[20, 20], [30, 70], [70, 50], [20, 20]]]), 255)
# Show only for visualization purposes
cv2.imshow('img', img)
cv2.imshow('mask', mask)
# Convert mask to boolean array
mask = np.bool_(mask)
# Use boolean array indexing to get all BGR values from img within mask
values = img[mask]
# For example, save values to txt file
np.savetxt('values.txt', values)
cv2.waitKey(0)
cv2.destroyAllWindows()
有超过1000个条目,请检查一下自己。注意:值是BGR值;例如需要先将图像转换为RGB以获得RGB值。
希望有帮助!