首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道在python中使用OpenCV检测到的白色区域的位置?

如何知道在python中使用OpenCV检测到的白色区域的位置?
EN

Stack Overflow用户
提问于 2017-01-29 17:19:03
回答 2查看 1.6K关注 0票数 2

例如,在这段代码中,我过滤了视频提要以显示白色区域。我如何知道他们的位置/坐标?(x,y)

代码语言:javascript
复制
import cv2
import numpy as np

cap = cv2.VideoCapture(0)

while(1):
    _, frame = cap.read()
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # define range of white color in HSV
    # change it according to your need !
    lower_white = np.array([0,0,0], dtype=np.uint8)
    upper_white = np.array([0,0,255], dtype=np.uint8)

    # Threshold the HSV image to get only white colors
    mask = cv2.inRange(hsv, lower_white, upper_white)
    # Bitwise-AND mask and original image
    res = cv2.bitwise_and(frame,frame, mask= mask)
    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)

    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()
EN

回答 2

Stack Overflow用户

发布于 2017-01-30 13:03:46

你可以使用numpy的方法来获得矩阵中所有不为零的值。

代码语言:javascript
复制
indcies = numpy.nonzero(res)
票数 0
EN

Stack Overflow用户

发布于 2017-01-30 17:55:11

根据Amitay的回答,您还可以使用OpenCV的函数findNonZero。我不知道它的实现方式与numpy的nonzero有什么不同,但如果给出相同的结果,而且速度更快(这对于大型循环或图像很有用)。

代码语言:javascript
复制
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.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41919319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档