OpenCV exec 的 PHP shell_exec 问题(MAMP 库错误)

Posted

技术标签:

【中文标题】OpenCV exec 的 PHP shell_exec 问题(MAMP 库错误)【英文标题】:PHP shell_exec issue with OpenCV exec (MAMP library error) 【发布时间】:2014-02-23 18:34:06 【问题描述】:

我正在尝试在一个简单的 php 文件中运行带有 shell_exec 的 OpenCV 可执行文件。当我在终端中运行可执行文件时,它只会打印出语句,如下所示:

 Method [0] Perfect, Base-Half : 1.000000, 0.999990 
 Method [1] Perfect, Base-Half : 0.000000, 0.018286 
 Method [2] Perfect, Base-Half : 1.260779, 1.225753 
 Method [3] Perfect, Base-Half : 0.000000, 0.052663 
Done 

但是当我尝试使用 php 获得相同的输出时,什么也没有出现。我尝试过使用其他不是 OpenCV 的可执行文件,它们与 shell_exec 一起工作正常,但是当我使用 OpenCV 可执行文件时,什么都没有显示。

这是我的 php 文件:

<?php
$argv = "./OpenCV\ Test IMGS/oranges1.jpg";
$test=shell_exec($argv);
echo $test;

$argv 变量是我在同一目录中的终端中键入的,并给出了我上面写的输出。 我的 OpenCV 代码如下所示:

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

/** @function main */
int main( int argc, char** argv )

  Mat src_base, hsv_base;
  Mat hsv_half_down;

  /// Load three images with different environment settings
  if( argc < 2 )
     printf("** Error. Usage: ./compareHist_Demo <image_settings0> <image_setting1> <image_settings2>\n");
      return -1;
    

  src_base = imread( argv[1], 1 );

  /// Convert to HSV
  cvtColor( src_base, hsv_base, CV_BGR2HSV );

  hsv_half_down = hsv_base( Range( hsv_base.rows/2, hsv_base.rows - 1 ), Range( 0, hsv_base.cols - 1 ) );

  /// Using 30 bins for hue and 32 for saturation
  int h_bins = 50; int s_bins = 60;
  int histSize[] =  h_bins, s_bins ;

  // hue varies from 0 to 256, saturation from 0 to 180
  float h_ranges[] =  0, 256 ;
  float s_ranges[] =  0, 180 ;

  const float* ranges[] =  h_ranges, s_ranges ;

  // Use the o-th and 1-st channels
  int channels[] =  0, 1 ;

  /// Histograms
  MatND hist_base;
  MatND hist_half_down;

  /// Calculate the histograms for the HSV images
  calcHist( &hsv_base, 1, channels, Mat(), hist_base, 2, histSize, ranges, true, false );
  normalize( hist_base, hist_base, 0, 1, NORM_MINMAX, -1, Mat() );

  calcHist( &hsv_half_down, 1, channels, Mat(), hist_half_down, 2, histSize, ranges, true, false );
  normalize( hist_half_down, hist_half_down, 0, 1, NORM_MINMAX, -1, Mat() );

  /// Apply the histogram comparison methods
  for( int i = 0; i < 4; i++ )
      int compare_method = i;
       double base_base = compareHist( hist_base, hist_base, compare_method );
       double base_half = compareHist( hist_base, hist_half_down, compare_method );

       printf( " Method [%d] Perfect, Base-Half : %f, %f \n", i, base_base, base_half );
     

  printf( "Done \n" );

  return 0;
 

我检查了我的错误日志,但没有收到 PHP 错误,但我在控制台中确实收到了另一个错误,但我不确定这意味着什么。这就是它所说的

如果有人可以向我解释这个错误是什么以及我该如何解决它,那就太好了?

【问题讨论】:

【参考方案1】:

好的,经过一番谷歌搜索后,我设法找到了问题所在。看起来 MAMP 改变了它的环境变量路径。我不太确定这是什么,但任何对此有更好了解的人请成为我的客人,向其他人解释。无论如何,我只需要注释掉这两条 $DYLD_LIBRARY_PATH 行就解决了我的错误。

这是我曾经帮助过我的webpage。

【讨论】:

以上是关于OpenCV exec 的 PHP shell_exec 问题(MAMP 库错误)的主要内容,如果未能解决你的问题,请参考以下文章

php exec()

如何启用php.ini的exec 权限

PHP 中的 system()、exec() 和 shell_exec() 有啥区别?

LINUX+NGINX下的PHP shell_exec()函数执行linux命令 2019-08-08

PHP:exec()函数为啥没有反应呢?

php curl_exec无法返回结果