PHP tclip擴展調用opencv從記憶體中讀取及解析圖片數據的問題

本文章來給各位同學介紹一個PHP tclip擴展調用opencv從記憶體中讀取及解析圖片數據的問題,希望文章能幫助到大家哦。

前兩天蠻說有一個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

例子

安裝步驟:

代碼如下
源碼下載:
下載opencv源碼:http://www.bo56.com/download/opencv2.tar.bz2
下載Tclip源碼:
http://code.taobao.org/p/tclip/src/
https://github.com/exinnet/tclip
安裝opencv2:
此擴展依賴于opencv2.0 之上版本。因此安裝前先安裝opencv。opencv的安裝步驟如下:
安裝過程中有任何疑問可以加qq 179815944咨詢。
1.安裝如下依賴包: gtk+ gtk+-devel pkgconfig libpng zlib libjpeg libtiff cmake
如果是centos可以執行如下命令進行安裝依賴包:
yum install gtk+ gtk+-devel pkgconfig libpng zlib libjpeg libtiff cmake
2.安裝opencv2,步驟如下:
解壓安裝包
cd 進入安裝包文件夾內。
cmake CMakeLists.txt
make && make install
vim /etc/profile
注意,在編譯opencv時,要使用gcc的4.4版本或者之上。否則會報錯。
3.設相關環境變量
在 unset i 前增加
export PKG_CONFIG_PATH=/usr/lib/pkgconfig/:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
保持退出後,執行如下命令
source /etc/profile
echo “/usr/local/lib/” > /etc/ld.so.conf.d/opencv.conf
ldconfig
安裝php圖片裁剪tclip擴展
cd 到源代碼目錄中的php_ext文件夾
phpize
./configure
make
cp modules/tclip.so 到 extension 目錄
修改php.ini。加入 extension=tclip.so
重啓fpm
安裝命令行
如果想使用命令行方式,可以進行如下安裝
cd 進入安裝包soft文件夾內
chmod +x ./tclip.sh
./tclip.sh
使用方法說明
第一種:在php中圖片裁剪使用格式:
tclip(文件原路徑,裁剪後的圖片保存路徑,裁剪後的圖片寬度,裁剪後的圖片高度)
示例:
$source_file = “/tmp/a.jpg”;
$dest_file = “/www/a_dest.jpg”;
$width = 400;
$height = 200;
$ret =tclip($source_file, $dest_file, $width, $height);
執行成功$ret 爲true,否則爲false
第二種:命令行
參數說明:
-s 原圖路徑
-d 裁剪後的圖片保存路徑
-w 裁剪後的圖片寬度
-h 裁剪後的圖片高度
./tclip -s a.jpg -d a_dest.jpg -w 400 -h 200

最後,雖然PHP中已經直接可以傳遞圖片的二進制數據了,但是發現opencv源碼中,也會先將二進制數據保存到一個臨時文件,再讀取的。並且在opencv-2.4.2版本中臨時文件不會被刪除,這就有點坑了。但是還是可以減少PHP的邏輯,所以支持二進制的圖片數據還是有必要的。

更多相關文章
  • 本文章來給大家介紹關于在window下PHP調用curl報記憶體不夠(curl out of memory)錯誤的解決辦法,有碰到此類問題的朋友可參考.今天在調用新浪微博api的時候(官網下載的sdk),發現發布圖片
  • mcrypt 是 php 裏面重要的加密支持擴展庫,Linux環境下默認是沒開啓的,在某些功能時,我們需要安裝mcrypt擴展才能正常訪問,本文就來講講如何完全安裝這個模塊.如果你的php站點 /var/log/httpd/error_log 中報如下錯誤:PHP Fatal error: Call
  • Gravatar頭像是現在博客通用的一個調用方法了,很多朋友的個人博客都使用了Gravatar頭像了,但最近有很多站長發現Gravatar頭像打開緩慢了,那麽我們要如何解決Gravatar圖片打不開或者打開慢的問題呢
  • windows下手工編譯php擴展memcache的例子
    Memcache是一個高效能的分布式的記憶體對象緩存系統,通過在記憶體裏維護一個統一的巨大的hash表,它能夠用來存儲各種格式的數據,包括圖像.視頻.文件以及數據庫檢索的結果等.簡單的說就是將數據調用到記憶體中,然後從記憶體中讀取,從而大大提高讀取速度.本篇主要簡述編譯php及其擴展memcache
  • 編譯安裝Redis和PHP擴展小編記得以前有介紹過了,不過文章介紹的不是很詳細,下面整理的一篇編譯安裝Redis和PHP擴展非常的詳細下面我們就一起來看看吧,希望例子能夠對各位有幫助的哦.Redis是一個開源的使用ANSI C語言編寫.支持網路.可基于記憶體亦可持久化的日志型.Key-Value數據 ...
  • LNMP中安裝 Xcache 緩存擴展,降低伺服器負載配置
    XCache 是一個開源的 opcode 緩存器/優化器, 這意味著他能夠提高您伺服器上的 PHP 效能了,不管是linux還是windows默認都沒有安裝的,下面小編爲各位介紹LNMP中安裝 Xcache 緩存擴展,降低伺服器負載配置.倡萌一直都是用軍哥的 lnmp 一鍵安裝包來配置伺服器環境,最 ...
  • Libevent 是一個用C語言編寫的.輕量級的開源高效能網路庫,主要有以下幾個亮點:事件驅動( event-driven),高效能;輕量級,專注于網路,下文我們就一起來看PHP Libevent擴展安裝配置及簡單應用的例子.libevent是一個基于事件驅動的高效能網路庫.支持多種 I/O 多路複 ...
  • asp.net C# 3.0 新特性 學習(二):匿名類型.擴展方法 有需要學習的朋友可參考一下.這兩天看了一下msdnwebcast上的visual studio 2008的系列課程,記錄下所學的知識,以便加深記憶
一周排行