PHP扩展tclip调用opencv从内存中读取及解析图片

PHPABC PHP开发 2,378 次浏览 , 没有评论

前两天蛮说有一个PHP扩展,tclip图片裁剪程序。

Tclip致力于人脸识别和图片显著性区域的识别,它与其他图片裁剪程序最大的不同之处在于,在裁剪后的图片中保留人脸和其他图片显著性区域,不过还是图片裁剪。

tclip这个扩展依赖开源的opencv库,百科:OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

回到正题,tclip这个小程序,只用到了opencv中一小部分功能,就是图片显著性区域的识别。

具体的裁剪算法,不做多的研究。

现在的问题是,想实现从内存中通过PHP读取图片的二进制数据(这部分数据是先准备好的)传递给opencv,通过查看opencv的API文档,看到了imdecode方法,可以从内存中载入图片。那么可以解决这个问题了。

关于安装tclip扩展的介绍:https://github.com/exinnet/tclip

但是要注意的是,opencv-2.4.9应该有bug,编译不成功,另外ubuntu-14.0.4的编译安装之后调用tclip函数报错,我测试的版本是:

centos-6.4
PHP-5.4.31
opencv-2.4.4

我简单的修改一下tclip扩展,支持直接从内存中载入图片数据:https://github.com/xudianyang/tclip

最后,虽然PHP中已经直接可以传递图片的二进制数据了,但是发现opencv源码中,也会先将二进制数据保存到一个临时文件,再读取的。并且在opencv-2.4.2版本中临时文件不会被删除,这就有点坑了。但是还是可以减少PHP的逻辑,所以支持二进制的图片数据还是有必要的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Go