2014-12-07 71 views
1

我正在使用Python的OpenCV,并在边缘检测脚本here我遇到了一些我从未见过的东西。我很抱歉如果这个问题之前已经被问到过,但我不确定要搜索什么。括号内的Python布尔值?

我已经粘贴了以下相关片:

while True: 
    flag, img = cap.read() 
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
    thrs1 = cv2.getTrackbarPos('thrs1', 'edge') 
    thrs2 = cv2.getTrackbarPos('thrs2', 'edge') 
    edge = cv2.Canny(gray, thrs1, thrs2, apertureSize=5) 
    vis = img.copy() 
    vis /= 2 
    vis[edge != 0] = (0, 255, 0) #This is the line I'm trying to figure out 
    cv2.imshow('edge', vis) 

的代码是不是我的,但OpenCV的文档的一部分。尽我所知,vis [edge!= 0]正在经历每个边缘元素,将其与真实值进行比较,然后以某种方式(这对我来说是奇怪的部分)将布尔评估的结果转换为xy坐标vis,然后将图像值设置为绿色。

这对我来说似乎有点神奇,因为我从来没有遇到过这样的事情,因为我大多是C/C++程序员。有人可以指向我可以阅读的文档吗?我有STFW失败,因为我不知道该怎么称呼这种行为。

回答

2

vis是numpy的阵列,并且[edge != 0]似乎为numpy.where()功能语法糖...所以其阈值化用Canny的值,然后绘制vis图像,其中边缘上的绿线。

这里是一个类似的例子。

import numpy as np 
x = np.arange(10) 
y = np.zeros(10) 
print y 
y[x>3] = 10 
print y