树莓派摄像头检测高亮LED颜色

一直想用摄像头拍摄来检查LED的颜色。但一直存在以下几个问题:

  1. LDE太亮,拍出来LDE中心的颜色基本上都是白色的。很多时候要加滤光片,而合适的滤光片不好找,这就增加了难度和成本。
  2. 摄像头拍照的参数无法修改。比如曝光补偿EV,感光度ISO,快门时间shutter speed, 这几个参数直接影响了成像的颜色和亮度。
  3. 摄像头像数,成像效果,速度,成本。一般的USB摄像头便宜,但是成像效果不好,无法很好地还原颜色,速度也偏慢。传统的工业摄像头成像效果可以,速度也快,但是价格不菲,无法不心痛地大量使用。

难道没有解决方法吗?有的!经过对比多种摄像头,包括无牌子的USB网络摄像头,有名的罗技带自动对焦的USB网络摄像头,某宝9.9的便宜手动对焦摄像头,还有带显微镜功能的USB摄像头都达不到想要的效果。终于双11,淘了几款树莓派的摄影像头,发现带手动对焦功能的一款500W像数,可以达到效果,而且也不到100RMB, 比较惊喜的是加上红外补光灯还可以夜间拍摄!这不是官方的那款,而是兼容的。

先来看看效果,一般拍摄的效果,这种情况只能判断出亮还是灭,无法判断颜色:

roi2

调节参数(感光度,快门时间)之后:

roi

局部细节如下, 这种图片就很好判断啦!blue-led-detail

detail-red-led

 

上面第一张图片使用的命令如下,明显LED的地方已经过曝光发白了。

第二张图片使用的命令如下,这里主要是把快门时间ss调成100微妙,感光度ISO调成200,LED的封装体正确地显示出颜色来,发光的点还是很明亮显白色,但这不影响我们判断颜色了,我们可以选择封装体的地方来判断,这样就可以让摄像头直接对着LED拍照检查颜色了。

 

这里使用的摄像头如下,这是一款CSI接口的摄像头,兼用树莓派的接口,所以要用在树莓派上了。使用命令raspistill, raspipid可以方便地获取到图片。在raspi-config里启用摄像头后,重启树莓派就可以用这两个命令了。

ir1080-cam-csi

还有v2.1的一款800W像数的,有空再试试效果。

来个合照和raspistill的帮助信息:

img_20161118_163859

很多时候想用python来做这个拍摄工作,然后可以结合其它的功能,有2个方法,一是在python里调用raspistill. 二是用picamera模块。以下是用picamera模块做的小程序,获取到一张图片。

程序里通过BytesIO()流,把图片转成了PIL的image, 然后再用image的save()方法保存成图片,这样就可以应用PIL对图片在内存里进行相应的计算,有时候不是必须存为文件的时候,这样做就可以减少IO操作,毕竟树莓派的写操作还是比较慢的,而且如果反复写SD卡的寿命估计也不长。

其实也可以用注悉掉的那两行其中一行都可以直接把图像保存起来,不是必须转成流再转成PIL的image再保存的。

同样获取到一张理想的图片:

009image_led_using_stream_to_pil