
这个问题常常会在最不方便的时候出现在你的脑子里。
有时是当你刚刚走出家门的时候。 有时是当你在上班路上的时候。 有时是当你坐在飞机上准备度个长假的时候……
解决这个问题的方法是多种多样的:
橡皮筋的方法
大声说或唱出来(就像 Samuel L. Jackson 一样)
当你离开家去度假的时候,给烤箱在内的电器列个清单或做个标记。 或者,我们也许有更好的做法……
在本教程中,我们会尝试利用技术手段解决这个问题。
Github 里有完整代码。
当红色灯灭的时候,烤箱是关着的:
预备条件
确保你的电脑上安装了以下应用:
OpenCV 3.0
Python 2.7
Numpy 1.9
importargparse
importnumpy asnp
importcv2
载入图片
image = cv2.imread(image_path)
图片降噪
我们为了给图片降噪,需要对输入图片进行平滑处理。这样会更容易在图片中定位目标。使用 medianBlur 函数,把光圈大小定为 3 。数字越大意味着图像会越模糊。
blur_image = cv2.medianBlur(image, 3)
检测图片中的颜色
为了检测我们想要的颜色,我们可以查看烤箱灯图片中颜色的直方图。
我们可以看出,红色在图片中占统治地位。红色有两个高峰 —— 一个幅度高,一个幅度低。这些颜色值转变为色度范围从 0 到10,以及从 160 到 180 (针对红色)。
=
接下来把这些图片合并在一起,以抓取所有红色色度。
full_image = cv2.addWeighted(lower_red_hue,1.0,higher_red_hue,1.0,0.0)
结果如下:
发现图片中的圆圈
结果
此时就可以检查是否有圆圈了。如果有就意味着至少有一个烤箱灯亮着。如果找不到圆圈就意味着没有灯亮,烤箱关着。
为了证明此结论,我们可以用下述代码在原图中画圆圈:
# Draw the circles on the original image
circles = np.round(circles[0, :]).astype("int")
for(center_x,center_y,radius)incircles:
cv2.circle(image,(center_x,center_y),radius,(0,255,0),4)
结果如下:
欢迎大家关注我的博客或者公众号:https://home.cnblogs.com/u/Python1234/ Python学习交流
欢迎加入千人交流学习群:125240963
网友评论