我目前正在使用Python对单个图像进行颜色检测。加载图像并确定RGB(或CV2中的BGR)后,我使用以下两行代码生成掩码和输出图像。
mask = cv2.inRange(image, lower, upper)
output = cv2.bitwise_and(image, image, mask = mask)
然后代码显示以下图像。
然而,现在我想要获取处理后的图像并提取绿线的像素坐标点。
谢谢。任何帮助都将不胜感激。
我目前正在使用Python对单个图像进行颜色检测。加载图像并确定RGB(或CV2中的BGR)后,我使用以下两行代码生成掩码和输出图像。
mask = cv2.inRange(image, lower, upper)
output = cv2.bitwise_and(image, image, mask = mask)
那么,在二值化图像上使用findNonZeros()怎么样?从黑色背景上的绿线图像开始:
import cv2
import numpy as np
img = cv2.imread(output.png)
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #converting to grayscale
img = img.astype(np.uint8)
#get all non zero values
coord = cv2.findNonZero(img)
编辑:在另一个问题中指出,您还可以使用NumPy的函数nonzeros。它给出相同的结果,但我发现它更慢。
import cv2
import numpy as np
import time
so=cv2.imread(your_image,0)
start1=time.clock()
coord=cv2.findNonZero(so)
end1=time.clock()
start2=time.clock()
coord2=np.nonzero(so)
end2=time.clock()
print("cv2.findNonZeros() takes "+str(end1-start1)+" seconds.")
print("np.nonzero() takes "+str(end2-start2)+" seconds.")
>>> cv2.findNonZeros() takes 0.003266 seconds.
>>> np.nonzero() takes 0.021132 seconds.