+8
-1
@@ -22,9 +22,16 @@ if test "$PHP_OPENCV" != "no"; then
|
||||
|
||||
PHP_REQUIRE_CXX()
|
||||
PHP_SUBST(OPENCV_SHARED_LIBADD)
|
||||
PHP_ADD_LIBRARY(stdc++, 1, OPENCV_SHARED_LIBADD)
|
||||
AC_DEFINE(HAVE_OPENCV, 1, [ ])
|
||||
|
||||
PHP_NEW_EXTENSION(opencv, opencv.c opencv_error.c opencv_mat.c opencv_arr.c opencv_image.c opencv_histogram.c opencv_capture.c, $ext_shared)
|
||||
PHP_NEW_EXTENSION(
|
||||
opencv,
|
||||
opencv.cpp opencv_error.cpp opencv_mat.cpp opencv_image.cpp opencv_histogram.cpp opencv_capture.cpp,
|
||||
$ext_shared,
|
||||
,
|
||||
,
|
||||
"yes")
|
||||
|
||||
EXT_OPENCV_HEADERS="php_opencv_api.h"
|
||||
|
||||
|
||||
Arquivo binário não exibido.
@@ -1,10 +1,11 @@
|
||||
<?php
|
||||
use OpenCV\Capture as Capture;
|
||||
/* Test the face detectoin feature, using a capture from the camera */
|
||||
$capture = new OpenCV\Capture(0);
|
||||
$capture = Capture::createCameraCapture(0);
|
||||
$image = $capture->queryFrame();
|
||||
$result = $image->haarDetectObjects("data/haarcascades/haarcascade_frontalface_default.xml");
|
||||
$result = $image->haarDetectObjects("/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml");
|
||||
foreach ($result as $r) {
|
||||
$image->rectangle($r['x'], $r['y'], $r['width'], $r['height']);
|
||||
}
|
||||
$image = $image->convertColor(RGB2GRAY);
|
||||
//$image = $image->convertColor(7);
|
||||
$image->save('/tmp/camera.jpg');
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
use OpenCV\Image as Image;
|
||||
use OpenCV\Histogram as Histogram;
|
||||
|
||||
$i = Image::load("test.jpg", Image::LOAD_IMAGE_COLOR);
|
||||
$result = $i->haarDetectObjects("data/haarcascades/haarcascade_frontalface_default.xml");
|
||||
$i = Image::load("sailing.jpg", Image::LOAD_IMAGE_COLOR);
|
||||
$result = $i->haarDetectObjects("/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml");
|
||||
|
||||
foreach ($result as $r) {
|
||||
$i->rectangle($r['x'], $r['y'], $r['width'], $r['height']);
|
||||
|
||||
@@ -22,10 +22,12 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "php.h"
|
||||
#include "php_opencv.h"
|
||||
|
||||
extern "C" {
|
||||
#include "php_ini.h"
|
||||
#include "ext/standard/info.h"
|
||||
#include "php_opencv.h"
|
||||
}
|
||||
|
||||
/* If you declare any globals in php_opencv.h uncomment this:
|
||||
ZEND_DECLARE_MODULE_GLOBALS(opencv)
|
||||
@@ -33,17 +35,20 @@ ZEND_DECLARE_MODULE_GLOBALS(opencv)
|
||||
|
||||
/* True global resources - no need for thread safety here */
|
||||
static int le_opencv;
|
||||
zend_error_handling opencv_original_error_handling;
|
||||
|
||||
PHP_OPENCV_API void php_opencv_basedir_check(const char *filename TSRMLS_DC) {
|
||||
const char *error_message;
|
||||
char *error_message;
|
||||
int status;
|
||||
|
||||
#if PHP_VERSION_ID < 50400
|
||||
if (PG(safe_mode) && (!php_checkuid_ex(filename, NULL, CHECKUID_CHECK_FILE_AND_DIR, CHECKUID_NO_ERRORS))) {
|
||||
error_message = estrdup("Could not access file due to safe_mode restrictions");
|
||||
zend_throw_exception(opencv_ce_cvexception, error_message, status TSRMLS_CC);
|
||||
zend_throw_exception(opencv_ce_cvexception, (char *) error_message, status TSRMLS_CC);
|
||||
efree(error_message);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (PG(open_basedir) && php_check_open_basedir_ex(filename, 0 TSRMLS_CC)) {
|
||||
error_message = estrdup("Could not access file due to open_basedir restrictions");
|
||||
@@ -104,7 +109,6 @@ PHP_MINIT_FUNCTION(opencv)
|
||||
*/
|
||||
|
||||
PHP_MINIT(opencv_error)(INIT_FUNC_ARGS_PASSTHRU);
|
||||
PHP_MINIT(opencv_arr)(INIT_FUNC_ARGS_PASSTHRU);
|
||||
PHP_MINIT(opencv_mat)(INIT_FUNC_ARGS_PASSTHRU);
|
||||
PHP_MINIT(opencv_image)(INIT_FUNC_ARGS_PASSTHRU);
|
||||
PHP_MINIT(opencv_histogram)(INIT_FUNC_ARGS_PASSTHRU);
|
||||
@@ -1,58 +0,0 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2010 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
| available through the world-wide-web at the following url: |
|
||||
| http://www.php.net/license/3_01.txt |
|
||||
| If you did not receive a copy of the PHP license and are unable to |
|
||||
| obtain it through the world-wide-web, please send a note to |
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Author: Michael Maclean <mgdm@php.net> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "php.h"
|
||||
#include "php_opencv.h"
|
||||
#include "zend_exceptions.h"
|
||||
|
||||
zend_class_entry *opencv_ce_cvarr;
|
||||
|
||||
/* {{{ proto void contruct()
|
||||
OpenCV_Arr CANNOT be extended in userspace, this will throw an exception on use */
|
||||
PHP_METHOD(OpenCV_Arr, __construct)
|
||||
{
|
||||
zend_throw_exception(opencv_ce_cvexception, "OpenCV\\Arr cannot be constructed", 0 TSRMLS_CC);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ opencv_arr_methods[] */
|
||||
const zend_function_entry opencv_arr_methods[] = {
|
||||
PHP_ME(OpenCV_Arr, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
|
||||
{NULL, NULL, NULL}
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
/* {{{ PHP_MINIT_FUNCTION */
|
||||
PHP_MINIT_FUNCTION(opencv_arr)
|
||||
{
|
||||
zend_class_entry ce;
|
||||
|
||||
INIT_NS_CLASS_ENTRY(ce, "OpenCV", "Arr", opencv_arr_methods);
|
||||
opencv_ce_cvarr = zend_register_internal_class(&ce TSRMLS_CC);
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
@@ -22,15 +22,12 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "php.h"
|
||||
#include "php_opencv.h"
|
||||
#include "zend_exceptions.h"
|
||||
#include <highgui.h>
|
||||
|
||||
zend_class_entry *opencv_ce_capture;
|
||||
|
||||
PHP_OPENCV_API opencv_capture_object* opencv_capture_object_get(zval *zobj TSRMLS_DC) {
|
||||
opencv_capture_object *pobj = zend_object_store_get_object(zobj TSRMLS_CC);
|
||||
opencv_capture_object *pobj = (opencv_capture_object *) zend_object_store_get_object(zobj TSRMLS_CC);
|
||||
if (pobj->cvptr == NULL) {
|
||||
php_error(E_ERROR, "Internal surface object missing in %s wrapper, you must call parent::__construct in extended classes", Z_OBJCE_P(zobj)->name);
|
||||
}
|
||||
@@ -56,7 +53,7 @@ PHP_OPENCV_API zend_object_value opencv_capture_object_new(zend_class_entry *ce
|
||||
opencv_capture_object *capture;
|
||||
zval *temp;
|
||||
|
||||
capture = ecalloc(1, sizeof(opencv_capture_object));
|
||||
capture = (opencv_capture_object *) ecalloc(1, sizeof(opencv_capture_object));
|
||||
|
||||
capture->std.ce = ce;
|
||||
capture->cvptr = NULL;
|
||||
@@ -89,7 +86,7 @@ PHP_METHOD(OpenCV_Capture, createCameraCapture)
|
||||
|
||||
object_init_ex(return_value, opencv_ce_capture);
|
||||
temp = (CvCapture *) cvCaptureFromCAM(camera);
|
||||
capture_object = zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
capture_object = (opencv_capture_object *) zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
capture_object->cvptr = temp;
|
||||
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
@@ -114,7 +111,7 @@ PHP_METHOD(OpenCV_Capture, createFileCapture)
|
||||
php_opencv_basedir_check(filename TSRMLS_CC);
|
||||
|
||||
object_init_ex(return_value, opencv_ce_capture);
|
||||
capture_object = zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
capture_object = (opencv_capture_object *) zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
temp = (CvCapture *) cvCreateFileCapture(filename);
|
||||
|
||||
if (temp == NULL) {
|
||||
@@ -145,7 +142,7 @@ PHP_METHOD(OpenCV_Capture, grabFrame)
|
||||
capture_object = opencv_capture_object_get(getThis() TSRMLS_CC);
|
||||
long result = cvGrabFrame(capture_object->cvptr);
|
||||
|
||||
php_opencv_throw_exception();
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
RETURN_LONG(result);
|
||||
}
|
||||
|
||||
@@ -165,9 +162,9 @@ PHP_METHOD(OpenCV_Capture, retrieveFrame)
|
||||
|
||||
capture_object = opencv_capture_object_get(getThis() TSRMLS_CC);
|
||||
temp = cvCloneImage(cvRetrieveFrame(capture_object->cvptr, 0));
|
||||
php_opencv_make_image_zval(temp, return_value);
|
||||
php_opencv_make_image_zval(temp, return_value TSRMLS_CC);
|
||||
|
||||
php_opencv_throw_exception();
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
}
|
||||
|
||||
PHP_METHOD(OpenCV_Capture, queryFrame)
|
||||
@@ -186,9 +183,9 @@ PHP_METHOD(OpenCV_Capture, queryFrame)
|
||||
|
||||
capture_object = opencv_capture_object_get(getThis() TSRMLS_CC);
|
||||
temp = cvCloneImage(cvQueryFrame(capture_object->cvptr));
|
||||
php_opencv_make_image_zval(temp, return_value);
|
||||
php_opencv_make_image_zval(temp, return_value TSRMLS_CC);
|
||||
|
||||
php_opencv_throw_exception();
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
}
|
||||
|
||||
PHP_METHOD(OpenCV_Capture, getProperty)
|
||||
@@ -209,7 +206,7 @@ PHP_METHOD(OpenCV_Capture, getProperty)
|
||||
|
||||
capture_object = opencv_capture_object_get(getThis() TSRMLS_CC);
|
||||
val = cvGetCaptureProperty(capture_object->cvptr, property);
|
||||
php_opencv_throw_exception();
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
|
||||
/* FourCC is special */
|
||||
if (property == CV_CAP_PROP_FOURCC) {
|
||||
@@ -237,7 +234,7 @@ PHP_METHOD(OpenCV_Capture, setProperty)
|
||||
|
||||
capture_object = opencv_capture_object_get(getThis() TSRMLS_CC);
|
||||
val = cvSetCaptureProperty(capture_object->cvptr, property, val);
|
||||
php_opencv_throw_exception();
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
}
|
||||
|
||||
/* {{{ opencv_capture_methods[] */
|
||||
@@ -22,8 +22,6 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "php.h"
|
||||
#include "zend_exceptions.h"
|
||||
#include "php_opencv.h"
|
||||
|
||||
zend_class_entry *opencv_ce_cvexception;
|
||||
@@ -22,15 +22,12 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "php.h"
|
||||
#include "php_opencv.h"
|
||||
#include "zend_exceptions.h"
|
||||
#include <highgui.h>
|
||||
|
||||
zend_class_entry *opencv_ce_histogram;
|
||||
|
||||
PHP_OPENCV_API opencv_histogram_object* opencv_histogram_object_get(zval *zobj TSRMLS_DC) {
|
||||
opencv_histogram_object *pobj = zend_object_store_get_object(zobj TSRMLS_CC);
|
||||
opencv_histogram_object *pobj = (opencv_histogram_object *) zend_object_store_get_object(zobj TSRMLS_CC);
|
||||
if (pobj->cvptr == NULL) {
|
||||
php_error(E_ERROR, "Internal surface object missing in %s wrapper, you must call parent::__construct in extended classes", Z_OBJCE_P(zobj)->name);
|
||||
}
|
||||
@@ -56,7 +53,7 @@ PHP_OPENCV_API zend_object_value opencv_histogram_object_new(zend_class_entry *c
|
||||
opencv_histogram_object *histogram;
|
||||
zval *temp;
|
||||
|
||||
histogram = ecalloc(1, sizeof(opencv_histogram_object));
|
||||
histogram = (opencv_histogram_object *) ecalloc(1, sizeof(opencv_histogram_object));
|
||||
|
||||
histogram->std.ce = ce;
|
||||
histogram->cvptr = NULL;
|
||||
@@ -92,7 +89,7 @@ PHP_METHOD(OpenCV_Histogram, __construct)
|
||||
cast_sizes = sizes;
|
||||
|
||||
temp = cvCreateHist(bins, &cast_sizes, type, NULL, 1);
|
||||
histogram_object = zend_object_store_get_object(getThis() TSRMLS_CC);
|
||||
histogram_object = (opencv_histogram_object *) zend_object_store_get_object(getThis() TSRMLS_CC);
|
||||
histogram_object->cvptr = temp;
|
||||
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
@@ -118,7 +115,7 @@ PHP_METHOD(OpenCV_Histogram, calc)
|
||||
image_object = opencv_image_object_get(image_zval TSRMLS_CC);
|
||||
cvCalcHist(&image_object->cvptr, hist_object->cvptr, accumulate, NULL);
|
||||
|
||||
php_opencv_throw_exception();
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
}
|
||||
|
||||
/* {{{ opencv_histogram_methods[] */
|
||||
@@ -22,15 +22,12 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "php.h"
|
||||
#include "php_opencv.h"
|
||||
#include "zend_exceptions.h"
|
||||
#include <highgui.h>
|
||||
|
||||
zend_class_entry *opencv_ce_image;
|
||||
|
||||
PHP_OPENCV_API opencv_image_object* opencv_image_object_get(zval *zobj TSRMLS_DC) {
|
||||
opencv_image_object *pobj = zend_object_store_get_object(zobj TSRMLS_CC);
|
||||
opencv_image_object *pobj = (opencv_image_object *) zend_object_store_get_object(zobj TSRMLS_CC);
|
||||
if (pobj->cvptr == NULL) {
|
||||
php_error(E_ERROR, "Internal surface object missing in %s wrapper, you must call parent::__construct in extended classes", Z_OBJCE_P(zobj)->name);
|
||||
}
|
||||
@@ -86,7 +83,7 @@ static zend_object_value opencv_image_object_new(zend_class_entry *ce TSRMLS_DC)
|
||||
opencv_image_object *image;
|
||||
zval *temp;
|
||||
|
||||
image = ecalloc(1, sizeof(opencv_image_object));
|
||||
image = (opencv_image_object *) ecalloc(1, sizeof(opencv_image_object));
|
||||
|
||||
image->std.ce = ce;
|
||||
image->cvptr = NULL;
|
||||
@@ -260,7 +257,7 @@ PHP_METHOD(OpenCV_Image, smooth) {
|
||||
|
||||
temp = cvCloneImage(image_object->cvptr);
|
||||
*return_value = *php_opencv_make_image_zval(temp, return_value TSRMLS_CC);
|
||||
dst_object = zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
dst_object = (opencv_image_object *) zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
|
||||
cvSmooth(image_object->cvptr, dst_object->cvptr, smoothType, params[0], params[1], params[2], params[3]);
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
@@ -284,7 +281,7 @@ PHP_METHOD(OpenCV_Image, laplace) {
|
||||
image_object = opencv_image_object_get(image_zval TSRMLS_CC);
|
||||
temp = cvCreateImage(cvGetSize(image_object->cvptr), IPL_DEPTH_16S, image_object->cvptr->nChannels);
|
||||
*return_value = *php_opencv_make_image_zval(temp, return_value TSRMLS_CC);
|
||||
dst_object = zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
dst_object = (opencv_image_object *) zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
|
||||
cvLaplace(image_object->cvptr, dst_object->cvptr, apertureSize);
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
@@ -308,7 +305,7 @@ PHP_METHOD(OpenCV_Image, sobel) {
|
||||
image_object = opencv_image_object_get(image_zval TSRMLS_CC);
|
||||
temp = cvCreateImage(cvGetSize(image_object->cvptr), IPL_DEPTH_16S, image_object->cvptr->nChannels);
|
||||
*return_value = *php_opencv_make_image_zval(temp, return_value TSRMLS_CC);
|
||||
dst_object = zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
dst_object = (opencv_image_object *) zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
|
||||
cvSobel(image_object->cvptr, dst_object->cvptr, xorder, yorder, apertureSize);
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
@@ -332,7 +329,7 @@ PHP_METHOD(OpenCV_Image, erode) {
|
||||
image_object = opencv_image_object_get(image_zval TSRMLS_CC);
|
||||
temp = cvCloneImage(image_object->cvptr);
|
||||
*return_value = *php_opencv_make_image_zval(temp, return_value TSRMLS_CC);
|
||||
dst_object = zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
dst_object = (opencv_image_object *) zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
|
||||
cvErode(image_object->cvptr, dst_object->cvptr, NULL, iterations);
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
@@ -356,7 +353,7 @@ PHP_METHOD(OpenCV_Image, dilate) {
|
||||
image_object = opencv_image_object_get(image_zval TSRMLS_CC);
|
||||
temp = cvCloneImage(image_object->cvptr);
|
||||
*return_value = *php_opencv_make_image_zval(temp, return_value TSRMLS_CC);
|
||||
dst_object = zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
dst_object = (opencv_image_object *) zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
|
||||
cvDilate(image_object->cvptr, dst_object->cvptr, NULL, iterations);
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
@@ -380,7 +377,7 @@ PHP_METHOD(OpenCV_Image, open) {
|
||||
image_object = opencv_image_object_get(image_zval TSRMLS_CC);
|
||||
temp = cvCloneImage(image_object->cvptr);
|
||||
*return_value = *php_opencv_make_image_zval(temp, return_value TSRMLS_CC);
|
||||
dst_object = zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
dst_object = (opencv_image_object *) zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
|
||||
cvMorphologyEx(image_object->cvptr, dst_object->cvptr, NULL, NULL, CV_MOP_OPEN, iterations);
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
@@ -404,7 +401,7 @@ PHP_METHOD(OpenCV_Image, close) {
|
||||
image_object = opencv_image_object_get(image_zval TSRMLS_CC);
|
||||
temp = cvCloneImage(image_object->cvptr);
|
||||
*return_value = *php_opencv_make_image_zval(temp, return_value TSRMLS_CC);
|
||||
dst_object = zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
dst_object = (opencv_image_object *) zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
|
||||
cvMorphologyEx(image_object->cvptr, dst_object->cvptr, NULL, NULL, CV_MOP_CLOSE, iterations);
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
@@ -429,7 +426,7 @@ PHP_METHOD(OpenCV_Image, gradient) {
|
||||
temp = cvCloneImage(image_object->cvptr);
|
||||
temp2 = cvCloneImage(image_object->cvptr);
|
||||
*return_value = *php_opencv_make_image_zval(temp, return_value TSRMLS_CC);
|
||||
dst_object = zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
dst_object = (opencv_image_object *) zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
|
||||
cvMorphologyEx(image_object->cvptr, dst_object->cvptr, temp2, NULL, CV_MOP_GRADIENT, iterations);
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
@@ -453,7 +450,7 @@ PHP_METHOD(OpenCV_Image, topHat) {
|
||||
image_object = opencv_image_object_get(image_zval TSRMLS_CC);
|
||||
temp = cvCloneImage(image_object->cvptr);
|
||||
*return_value = *php_opencv_make_image_zval(temp, return_value TSRMLS_CC);
|
||||
dst_object = zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
dst_object = (opencv_image_object *) zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
|
||||
cvMorphologyEx(image_object->cvptr, dst_object->cvptr, NULL, NULL, CV_MOP_TOPHAT, iterations);
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
@@ -477,7 +474,7 @@ PHP_METHOD(OpenCV_Image, blackHat) {
|
||||
image_object = opencv_image_object_get(image_zval TSRMLS_CC);
|
||||
temp = cvCloneImage(image_object->cvptr);
|
||||
*return_value = *php_opencv_make_image_zval(temp, return_value TSRMLS_CC);
|
||||
dst_object = zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
dst_object = (opencv_image_object *) zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
|
||||
cvMorphologyEx(image_object->cvptr, dst_object->cvptr, NULL, NULL, CV_MOP_BLACKHAT, iterations);
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
@@ -604,15 +601,15 @@ PHP_METHOD(OpenCV_Image, split) {
|
||||
|
||||
image_object = opencv_image_object_get(image_zval TSRMLS_CC);
|
||||
|
||||
IplImage **planes = calloc(image_object->cvptr->nChannels, sizeof(IplImage *));
|
||||
zval **return_zvals = calloc(image_object->cvptr->nChannels, sizeof(zval *));
|
||||
IplImage **planes = (IplImage **) ecalloc(image_object->cvptr->nChannels, sizeof(IplImage *));
|
||||
zval **return_zvals = (zval **) ecalloc(image_object->cvptr->nChannels, sizeof(zval *));
|
||||
|
||||
for (i = 0; i < image_object->cvptr->nChannels; i++) {
|
||||
opencv_image_object *current_plane;
|
||||
MAKE_STD_ZVAL(return_zvals[i]);
|
||||
object_init_ex(return_zvals[i], opencv_ce_image);
|
||||
temp = cvCreateImage(cvGetSize(image_object->cvptr), IPL_DEPTH_8U, 1);
|
||||
php_opencv_make_image_zval(temp, return_zvals[i]);
|
||||
php_opencv_make_image_zval(temp, return_zvals[i] TSRMLS_CC);
|
||||
planes[i] = temp;
|
||||
}
|
||||
|
||||
@@ -652,7 +649,7 @@ PHP_METHOD(OpenCV_Image, convertColor) {
|
||||
|
||||
temp = cvCreateImage(cvGetSize(image_object->cvptr), image_object->cvptr->depth, channels);
|
||||
cvCvtColor(image_object->cvptr, temp, code);
|
||||
php_opencv_make_image_zval(temp, return_value);
|
||||
php_opencv_make_image_zval(temp, return_value TSRMLS_CC);
|
||||
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
}
|
||||
@@ -678,7 +675,7 @@ PHP_METHOD(OpenCV_Image, backProject)
|
||||
|
||||
temp = cvCloneImage(image_object->cvptr);
|
||||
cvCalcBackProject(&image_object->cvptr, temp, hist_object->cvptr);
|
||||
php_opencv_make_image_zval(temp, return_value);
|
||||
php_opencv_make_image_zval(temp, return_value TSRMLS_CC);
|
||||
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
}
|
||||
@@ -707,7 +704,7 @@ PHP_METHOD(OpenCV_Image, matchTemplate)
|
||||
IPL_DEPTH_32F, 1);
|
||||
|
||||
cvMatchTemplate(image_object->cvptr, template_object->cvptr, temp, mode);
|
||||
php_opencv_make_image_zval(temp, return_value);
|
||||
php_opencv_make_image_zval(temp, return_value TSRMLS_CC);
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
}
|
||||
/* }}} */
|
||||
@@ -784,7 +781,7 @@ PHP_METHOD(OpenCV_Image, haarDetectObjects)
|
||||
}
|
||||
|
||||
//cvReleaseImage(grey_image);
|
||||
php_opencv_throw_exception();
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -826,7 +823,7 @@ PHP_MINIT_FUNCTION(opencv_image)
|
||||
zend_class_entry ce;
|
||||
|
||||
INIT_NS_CLASS_ENTRY(ce, "OpenCV", "Image", opencv_image_methods);
|
||||
opencv_ce_image = zend_register_internal_class_ex(&ce, opencv_ce_cvarr, NULL TSRMLS_CC);
|
||||
opencv_ce_image = zend_register_internal_class_ex(&ce, opencv_ce_cvmat, NULL TSRMLS_CC);
|
||||
opencv_ce_image->create_object = opencv_image_object_new;
|
||||
|
||||
#define REGISTER_IMAGE_LONG_CONST(const_name, value) \
|
||||
-115
@@ -1,115 +0,0 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2010 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
| available through the world-wide-web at the following url: |
|
||||
| http://www.php.net/license/3_01.txt |
|
||||
| If you did not receive a copy of the PHP license and are unable to |
|
||||
| obtain it through the world-wide-web, please send a note to |
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Author: Michael Maclean <mgdm@php.net> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "php.h"
|
||||
#include "php_opencv.h"
|
||||
#include "zend_exceptions.h"
|
||||
|
||||
zend_class_entry *opencv_ce_cvmat;
|
||||
|
||||
static inline opencv_mat_object* opencv_mat_object_get(zval *zobj TSRMLS_DC) {
|
||||
opencv_mat_object *pobj = zend_object_store_get_object(zobj TSRMLS_CC);
|
||||
if (pobj->cvptr == NULL) {
|
||||
php_error(E_ERROR, "Internal surface object missing in %s wrapper, you must call parent::__construct in extended classes", Z_OBJCE_P(zobj)->name);
|
||||
}
|
||||
return pobj;
|
||||
}
|
||||
|
||||
void opencv_mat_object_destroy(void *object TSRMLS_DC)
|
||||
{
|
||||
opencv_mat_object *mat = (opencv_mat_object *)object;
|
||||
|
||||
zend_hash_destroy(mat->std.properties);
|
||||
FREE_HASHTABLE(mat->std.properties);
|
||||
|
||||
if(mat->cvptr != NULL){
|
||||
cvRelease(&mat->cvptr);
|
||||
}
|
||||
efree(mat);
|
||||
}
|
||||
|
||||
static zend_object_value opencv_mat_object_new(zend_class_entry *ce TSRMLS_DC)
|
||||
{
|
||||
zend_object_value retval;
|
||||
opencv_mat_object *mat;
|
||||
zval *temp;
|
||||
|
||||
mat = ecalloc(1, sizeof(opencv_mat_object));
|
||||
|
||||
mat->std.ce = ce;
|
||||
mat->cvptr = NULL;
|
||||
|
||||
ALLOC_HASHTABLE(mat->std.properties);
|
||||
zend_hash_init(mat->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
|
||||
#if PHP_VERSION_ID < 50399
|
||||
zend_hash_copy(mat->std.properties, &ce->default_properties, (copy_ctor_func_t) zval_add_ref,(void *) &temp, sizeof(zval *));
|
||||
#else
|
||||
object_properties_init(&mat->std, ce);
|
||||
#endif
|
||||
retval.handle = zend_objects_store_put(mat, NULL, (zend_objects_free_object_storage_t)opencv_mat_object_destroy, NULL TSRMLS_CC);
|
||||
retval.handlers = zend_get_std_object_handlers();
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* {{{ proto void contruct()
|
||||
OpenCV_Mat CANNOT be extended in userspace, this will throw an exception on use */
|
||||
PHP_METHOD(OpenCV_Mat, __construct)
|
||||
{
|
||||
long rows, cols, type;
|
||||
opencv_mat_object *object;
|
||||
|
||||
PHP_OPENCV_ERROR_HANDLING();
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &rows, &cols, &type) == FAILURE) {
|
||||
PHP_OPENCV_RESTORE_ERRORS();
|
||||
return;
|
||||
}
|
||||
PHP_OPENCV_RESTORE_ERRORS();
|
||||
|
||||
object = (opencv_mat_object *) zend_object_store_get_object(getThis() TSRMLS_CC);
|
||||
object->cvptr = cvCreateMat(rows, cols, type);
|
||||
php_opencv_throw_exception();
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ opencv_mat_methods[] */
|
||||
const zend_function_entry opencv_mat_methods[] = {
|
||||
PHP_ME(OpenCV_Mat, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
|
||||
{NULL, NULL, NULL}
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
|
||||
/* {{{ PHP_MINIT_FUNCTION */
|
||||
PHP_MINIT_FUNCTION(opencv_mat)
|
||||
{
|
||||
zend_class_entry ce;
|
||||
|
||||
INIT_NS_CLASS_ENTRY(ce, "OpenCV", "Mat", opencv_mat_methods);
|
||||
opencv_ce_cvarr = zend_register_internal_class_ex(&ce, opencv_ce_cvarr, NULL TSRMLS_CC);
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
@@ -0,0 +1,218 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2010 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
| available through the world-wide-web at the following url: |
|
||||
| http://www.php.net/license/3_01.txt |
|
||||
| If you did not receive a copy of the PHP license and are unable to |
|
||||
| obtain it through the world-wide-web, please send a note to |
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Author: Michael Maclean <mgdm@php.net> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "php_opencv.h"
|
||||
|
||||
zend_class_entry *opencv_ce_cvmat;
|
||||
|
||||
static inline opencv_mat_object* opencv_mat_object_get(zval *zobj TSRMLS_DC) {
|
||||
opencv_mat_object *pobj = (opencv_mat_object *) zend_object_store_get_object(zobj TSRMLS_CC);
|
||||
if (pobj->cvptr->empty()) {
|
||||
php_error(E_ERROR, "Internal surface object missing in %s wrapper, you must call parent::__construct in extended classes", Z_OBJCE_P(zobj)->name);
|
||||
}
|
||||
return pobj;
|
||||
}
|
||||
|
||||
#define PHP_OPENCV_ADD_MAT_LONG_PROPERTY(PROPERTY, MEMBER) \
|
||||
do { \
|
||||
zval *temp_prop; \
|
||||
MAKE_STD_ZVAL(temp_prop); \
|
||||
ZVAL_LONG(temp_prop, MEMBER); \
|
||||
zend_hash_update(Z_OBJPROP_P(mat_zval), PROPERTY, sizeof(PROPERTY), (void **) &temp_prop, sizeof(zval *), NULL); \
|
||||
} while(0)
|
||||
|
||||
/*
|
||||
PHP_OPENCV_API zval *php_opencv_make_mat_zval(Mat mat, zval *mat_zval TSRMLS_DC) {
|
||||
zval *return_value, *width, *height;
|
||||
opencv_mat_object *mat_obj;
|
||||
|
||||
if (mat_zval == NULL) {
|
||||
MAKE_STD_ZVAL(mat_zval);
|
||||
}
|
||||
|
||||
object_init_ex(mat_zval, opencv_ce_cvmat);
|
||||
mat_obj = (opencv_mat_object *) zend_object_store_get_object(mat_zval TSRMLS_CC);
|
||||
mat_obj->cvptr = &mat;
|
||||
|
||||
PHP_OPENCV_ADD_MAT_LONG_PROPERTY("cols", mat.cols);
|
||||
PHP_OPENCV_ADD_MAT_LONG_PROPERTY("rows", mat.rows);
|
||||
PHP_OPENCV_ADD_MAT_LONG_PROPERTY("channels", mat.channels());
|
||||
// PHP_OPENCV_ADD_MAT_LONG_PROPERTY("alphaChannel", mat.alphaChannel);
|
||||
PHP_OPENCV_ADD_MAT_LONG_PROPERTY("depth", mat.depth());
|
||||
|
||||
return mat_zval;
|
||||
}
|
||||
*/
|
||||
|
||||
static void opencv_mat_object_assign_properties(zval *mat_zval TSRMLS_DC) {
|
||||
opencv_mat_object *mat_obj;
|
||||
mat_obj = (opencv_mat_object *) zend_object_store_get_object(mat_zval TSRMLS_CC);
|
||||
|
||||
PHP_OPENCV_ADD_MAT_LONG_PROPERTY("cols", mat_obj->cvptr->cols);
|
||||
PHP_OPENCV_ADD_MAT_LONG_PROPERTY("rows", mat_obj->cvptr->rows);
|
||||
PHP_OPENCV_ADD_MAT_LONG_PROPERTY("channels", mat_obj->cvptr->channels());
|
||||
// PHP_OPENCV_ADD_MAT_LONG_PROPERTY("alphaChannel", mat_obj->cvptr.alphaChannel);
|
||||
PHP_OPENCV_ADD_MAT_LONG_PROPERTY("depth", mat_obj->cvptr->depth());
|
||||
}
|
||||
|
||||
void opencv_mat_object_destroy(void *object TSRMLS_DC)
|
||||
{
|
||||
opencv_mat_object *mat = (opencv_mat_object *)object;
|
||||
//delete mat->cvptr;
|
||||
zend_hash_destroy(mat->std.properties);
|
||||
FREE_HASHTABLE(mat->std.properties);
|
||||
|
||||
/*
|
||||
if(mat->cvptr != NULL){
|
||||
cvRelease((void **) &mat->cvptr);
|
||||
}
|
||||
*/
|
||||
efree(mat);
|
||||
}
|
||||
|
||||
static zend_object_value opencv_mat_object_new(zend_class_entry *ce TSRMLS_DC)
|
||||
{
|
||||
zend_object_value retval;
|
||||
opencv_mat_object *mat;
|
||||
zval *temp;
|
||||
|
||||
mat = (opencv_mat_object *) ecalloc(1, sizeof(opencv_mat_object));
|
||||
|
||||
mat->std.ce = ce;
|
||||
//mat->cvptr = NULL;
|
||||
|
||||
ALLOC_HASHTABLE(mat->std.properties);
|
||||
zend_hash_init(mat->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
|
||||
#if PHP_VERSION_ID < 50399
|
||||
zend_hash_copy(mat->std.properties, &ce->default_properties, (copy_ctor_func_t) zval_add_ref,(void *) &temp, sizeof(zval *));
|
||||
#else
|
||||
object_properties_init(&mat->std, ce);
|
||||
#endif
|
||||
retval.handle = zend_objects_store_put(mat, NULL, (zend_objects_free_object_storage_t)opencv_mat_object_destroy, NULL TSRMLS_CC);
|
||||
retval.handlers = zend_get_std_object_handlers();
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* {{{ proto void contruct()
|
||||
OpenCV_Mat CANNOT be extended in userspace, this will throw an exception on use */
|
||||
PHP_METHOD(OpenCV_Mat, __construct)
|
||||
{
|
||||
long rows, cols, type;
|
||||
opencv_mat_object *object;
|
||||
|
||||
PHP_OPENCV_ERROR_HANDLING();
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &rows, &cols, &type) == FAILURE) {
|
||||
PHP_OPENCV_RESTORE_ERRORS();
|
||||
return;
|
||||
}
|
||||
PHP_OPENCV_RESTORE_ERRORS();
|
||||
|
||||
object = (opencv_mat_object *) zend_object_store_get_object(getThis() TSRMLS_CC);
|
||||
object->cvptr = new Mat(rows, cols, type);
|
||||
opencv_mat_object_assign_properties(getThis() TSRMLS_CC);
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
PHP_METHOD(OpenCV_Mat, load) {
|
||||
Mat temp;
|
||||
char *filename;
|
||||
int filename_len;
|
||||
long mode = 0;
|
||||
opencv_mat_object *mat_obj;
|
||||
|
||||
PHP_OPENCV_ERROR_HANDLING();
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &filename, &filename_len, &mode) == FAILURE) {
|
||||
PHP_OPENCV_RESTORE_ERRORS();
|
||||
return;
|
||||
}
|
||||
PHP_OPENCV_RESTORE_ERRORS();
|
||||
|
||||
php_opencv_basedir_check(filename TSRMLS_CC);
|
||||
|
||||
object_init_ex(return_value, opencv_ce_cvmat);
|
||||
mat_obj = (opencv_mat_object *) zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
|
||||
temp = imread(filename, mode);
|
||||
if (temp.empty()) {
|
||||
char *error_message = estrdup("Could not open the video file - check it exists and the codec is available");
|
||||
zend_throw_exception(opencv_ce_cvexception, error_message, 0 TSRMLS_CC);
|
||||
efree(error_message);
|
||||
return;
|
||||
}
|
||||
|
||||
// I'm sure there's a neater way to do this
|
||||
mat_obj->cvptr = new Mat(temp);
|
||||
opencv_mat_object_assign_properties(return_value TSRMLS_CC);
|
||||
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
}
|
||||
|
||||
PHP_METHOD(OpenCV_Mat, save) {
|
||||
opencv_mat_object *mat_object;
|
||||
zval *mat_zval = NULL;
|
||||
char *filename;
|
||||
int filename_len, cast_mode;
|
||||
bool status;
|
||||
long mode = 0;
|
||||
|
||||
PHP_OPENCV_ERROR_HANDLING();
|
||||
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|l", &mat_zval, opencv_ce_cvmat, &filename, &filename_len, &mode) == FAILURE) {
|
||||
PHP_OPENCV_RESTORE_ERRORS();
|
||||
return;
|
||||
}
|
||||
PHP_OPENCV_RESTORE_ERRORS();
|
||||
|
||||
mat_object = opencv_mat_object_get(getThis() TSRMLS_CC);
|
||||
cast_mode = mode;
|
||||
status = imwrite(filename, *mat_object->cvptr);
|
||||
php_opencv_throw_exception(TSRMLS_C);
|
||||
|
||||
if (!status) {
|
||||
zend_throw_exception(opencv_ce_cvexception, "Failed to save image", 0 TSRMLS_CC);
|
||||
}
|
||||
}
|
||||
|
||||
/* {{{ opencv_mat_methods[] */
|
||||
const zend_function_entry opencv_mat_methods[] = {
|
||||
PHP_ME(OpenCV_Mat, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
|
||||
PHP_ME(OpenCV_Mat, load, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
|
||||
PHP_ME(OpenCV_Mat, save, NULL, ZEND_ACC_PUBLIC)
|
||||
{NULL, NULL, NULL}
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
/* {{{ PHP_MINIT_FUNCTION */
|
||||
PHP_MINIT_FUNCTION(opencv_mat)
|
||||
{
|
||||
zend_class_entry ce;
|
||||
|
||||
INIT_NS_CLASS_ENTRY(ce, "OpenCV", "Mat", opencv_mat_methods);
|
||||
opencv_ce_cvmat = zend_register_internal_class(&ce TSRMLS_CC);
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
+23
-60
@@ -21,9 +21,21 @@
|
||||
#ifndef PHP_OPENCV_H
|
||||
#define PHP_OPENCV_H
|
||||
|
||||
extern "C" {
|
||||
#include "php.h"
|
||||
#include "zend_exceptions.h"
|
||||
|
||||
#ifdef ZTS
|
||||
#include "TSRM.h"
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
extern zend_error_handling opencv_original_error_handling;
|
||||
extern zend_module_entry opencv_module_entry;
|
||||
#define phpext_opencv_ptr &opencv_module_entry
|
||||
|
||||
|
||||
#ifdef PHP_WIN32
|
||||
# define PHP_OPENCV_API __declspec(dllexport)
|
||||
#elif defined(__GNUC__) && __GNUC__ >= 4
|
||||
@@ -32,69 +44,28 @@ extern zend_module_entry opencv_module_entry;
|
||||
# define PHP_OPENCV_API
|
||||
#endif
|
||||
|
||||
#ifndef FALSE
|
||||
#define FALSE (0)
|
||||
#endif
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE (!FALSE)
|
||||
#endif
|
||||
|
||||
/* Macros for PHP 5.2 */
|
||||
#ifndef zend_parse_parameters_none
|
||||
#define zend_parse_parameters_none() \
|
||||
zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "")
|
||||
#endif
|
||||
|
||||
/* Constants for open_basedir checks */
|
||||
#define OPENCV_READ_WRITE_NO_ERROR 0
|
||||
#define OPENCV_READ_WRITE_SAFE_MODE_ERROR 1
|
||||
#define OPENCV_READ_WRITE_OPEN_BASEDIR_ERROR 2
|
||||
|
||||
/* refcount macros */
|
||||
#ifndef Z_ADDREF_P
|
||||
#define Z_ADDREF_P(pz) (pz)->refcount++
|
||||
#endif
|
||||
|
||||
#ifndef Z_DELREF_P
|
||||
#define Z_DELREF_P(pz) (pz)->refcount--
|
||||
#endif
|
||||
|
||||
#ifndef Z_SET_REFCOUNT_P
|
||||
#define Z_SET_REFCOUNT_P(pz, rc) (pz)->refcount = rc
|
||||
#endif
|
||||
|
||||
/* turn error handling to exception mode and restore */
|
||||
#if PHP_VERSION_ID >= 50300
|
||||
/* 5.3 version of the macros */
|
||||
#define PHP_OPENCV_ERROR_HANDLING() \
|
||||
zend_replace_error_handling(EH_THROW, opencv_ce_cvexception, &opencv_original_error_handling TSRMLS_CC)
|
||||
#define PHP_OPENCV_ERROR_HANDLING() do { \
|
||||
zend_replace_error_handling(EH_THROW, opencv_ce_cvexception, &opencv_original_error_handling TSRMLS_CC); \
|
||||
} while(0)
|
||||
|
||||
#define PHP_OPENCV_RESTORE_ERRORS() \
|
||||
zend_restore_error_handling(&opencv_original_error_handling TSRMLS_CC)
|
||||
#define PHP_OPENCV_RESTORE_ERRORS() do { \
|
||||
zend_restore_error_handling(&opencv_original_error_handling TSRMLS_CC); \
|
||||
} while(0)
|
||||
|
||||
#else
|
||||
/* 5.2 versions of the macros */
|
||||
#define PHP_OPENCV_ERROR_HANDLING() \
|
||||
php_set_error_handling(EH_THROW, opencv_ce_cvexception TSRMLS_CC)
|
||||
#include <opencv2/opencv.hpp>
|
||||
#include <opencv2/highgui/highgui.hpp>
|
||||
|
||||
#define PHP_OPENCV_RESTORE_ERRORS() \
|
||||
php_std_error_handling()
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef ZTS
|
||||
#include "TSRM.h"
|
||||
#endif
|
||||
|
||||
#include <cv.h>
|
||||
#include <highgui.h>
|
||||
using namespace cv;
|
||||
|
||||
PHP_MINIT_FUNCTION(opencv);
|
||||
PHP_MINIT_FUNCTION(opencv_error);
|
||||
PHP_MINIT_FUNCTION(opencv_mat);
|
||||
PHP_MINIT_FUNCTION(opencv_arr);
|
||||
PHP_MINIT_FUNCTION(opencv_image);
|
||||
PHP_MINIT_FUNCTION(opencv_histogram);
|
||||
PHP_MINIT_FUNCTION(opencv_capture);
|
||||
@@ -105,22 +76,14 @@ PHP_RINIT_FUNCTION(opencv);
|
||||
extern zend_object_handlers opencv_std_object_handlers;
|
||||
extern zend_class_entry *opencv_ce_cvexception;
|
||||
extern zend_class_entry *opencv_ce_cvmat;
|
||||
extern zend_class_entry *opencv_ce_cvarr;
|
||||
extern zend_class_entry *opencv_ce_image;
|
||||
extern zend_class_entry *opencv_ce_histogram;
|
||||
|
||||
zend_error_handling opencv_original_error_handling;
|
||||
|
||||
typedef struct _opencv_arr_object {
|
||||
zend_object std;
|
||||
zend_bool constructed;
|
||||
CvArr *cvptr;
|
||||
} opencv_arr_object;
|
||||
|
||||
typedef struct _opencv_mat_object {
|
||||
zend_object std;
|
||||
zend_bool constructed;
|
||||
CvMat *cvptr;
|
||||
Mat *cvptr;
|
||||
} opencv_mat_object;
|
||||
|
||||
typedef struct _opencv_image_object {
|
||||
@@ -142,7 +105,7 @@ typedef struct _opencv_capture_object {
|
||||
} opencv_capture_object;
|
||||
|
||||
|
||||
PHP_OPENCV_API extern void php_opencv_throw_exception();
|
||||
PHP_OPENCV_API extern void php_opencv_throw_exception(TSRMLS_D);
|
||||
PHP_OPENCV_API void php_opencv_basedir_check(const char *filename TSRMLS_DC);
|
||||
PHP_OPENCV_API extern opencv_image_object* opencv_image_object_get(zval *zobj TSRMLS_DC);
|
||||
PHP_OPENCV_API extern opencv_histogram_object* opencv_histogram_object_get(zval *zobj TSRMLS_DC);
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário