add DNN::blobFromImages function
Esse commit está contido em:
@@ -258,6 +258,7 @@ const zend_function_entry opencv_functions[] = {
|
||||
ZEND_NS_NAMED_FE(OPENCV_NS, getPerspectiveTransform, ZEND_FN(opencv_get_perspective_transform), opencv_get_perspective_transform_arginfo)
|
||||
ZEND_NS_NAMED_FE(OPENCV_NS, warpPerspective, ZEND_FN(opencv_warp_perspective), opencv_warp_perspective_arginfo)
|
||||
ZEND_NS_NAMED_FE(OPENCV_DNN_NS, blobFromImage, ZEND_FN(opencv_dnn_blob_from_image), arginfo_void)
|
||||
ZEND_NS_NAMED_FE(OPENCV_DNN_NS, blobFromImages, ZEND_FN(opencv_dnn_blob_from_images), arginfo_void)
|
||||
ZEND_NS_NAMED_FE(OPENCV_DNN_NS, readNetFromCaffe, ZEND_FN(opencv_dnn_read_net_from_caffe), arginfo_void)
|
||||
ZEND_NS_NAMED_FE(OPENCV_DNN_NS, readNetFromTorch, ZEND_FN(opencv_dnn_read_net_from_torch), arginfo_void)
|
||||
ZEND_NS_NAMED_FE(OPENCV_DNN_NS, readNetFromTensorflow, ZEND_FN(opencv_dnn_read_net_from_tensorflow), arginfo_void)
|
||||
|
||||
@@ -78,6 +78,48 @@ PHP_FUNCTION(opencv_dnn_blob_from_image)
|
||||
RETURN_ZVAL(&instance,0,0); //return php Mat object
|
||||
}
|
||||
|
||||
PHP_FUNCTION(opencv_dnn_blob_from_images)
|
||||
{
|
||||
zval *images_zval, *size_zval, *mean_zval;
|
||||
double scalefactor = 1.;
|
||||
bool swapRB = false, crop = false;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "adOO|bb",
|
||||
&images_zval,
|
||||
&scalefactor,
|
||||
&size_zval, opencv_size_ce,
|
||||
&mean_zval, opencv_scalar_ce,
|
||||
&swapRB,
|
||||
&crop
|
||||
) == FAILURE) {
|
||||
RETURN_NULL();
|
||||
}
|
||||
|
||||
opencv_size_object *size_object = Z_PHP_SIZE_OBJ_P(size_zval);
|
||||
opencv_scalar_object *mean_object = Z_PHP_SCALAR_OBJ_P(mean_zval);
|
||||
|
||||
HashTable *images_ht = Z_ARRVAL_P(images_zval);
|
||||
std::vector<cv::Mat> images_vec;
|
||||
|
||||
zval *image_zval;
|
||||
ZEND_HASH_FOREACH_VAL(images_ht, image_zval) {
|
||||
if(Z_TYPE_P(image_zval) == IS_OBJECT && Z_OBJCE_P(image_zval)==opencv_mat_ce)
|
||||
images_vec.push_back(*Z_PHP_MAT_OBJ_P(image_zval)->mat);
|
||||
}
|
||||
ZEND_HASH_FOREACH_END();
|
||||
|
||||
|
||||
Mat im = blobFromImages(images_vec, scalefactor, *size_object->size, *mean_object->scalar, swapRB, crop);
|
||||
|
||||
zval instance;
|
||||
object_init_ex(&instance, opencv_mat_ce);
|
||||
opencv_mat_object *new_obj = Z_PHP_MAT_OBJ_P(&instance);
|
||||
new_obj->mat=new Mat(im);
|
||||
opencv_mat_update_property_by_c_mat(&instance, new_obj->mat);
|
||||
RETURN_ZVAL(&instance,0,0); //return php Mat object
|
||||
}
|
||||
|
||||
|
||||
PHP_FUNCTION(opencv_dnn_read_net_from_torch)
|
||||
{
|
||||
char *filename;
|
||||
|
||||
@@ -28,6 +28,7 @@ extern void opencv_dnn_init(int module_number);
|
||||
|
||||
#endif
|
||||
PHP_FUNCTION(opencv_dnn_blob_from_image);
|
||||
PHP_FUNCTION(opencv_dnn_blob_from_images);
|
||||
PHP_FUNCTION(opencv_dnn_read_net_from_torch);
|
||||
PHP_FUNCTION(opencv_dnn_read_net_from_caffe);
|
||||
PHP_FUNCTION(opencv_dnn_read_net_from_tensorflow);
|
||||
|
||||
+17
-1
@@ -1,5 +1,5 @@
|
||||
--TEST--
|
||||
DNN::blobFromImage
|
||||
DNN::blobFromImage, DNN:blobFromImages
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("opencv")) print "skip"; ?>
|
||||
--FILE--
|
||||
@@ -11,8 +11,24 @@ $src = imread("./tests/Obama_gray.png");
|
||||
|
||||
$blob = \CV\DNN\blobFromImage($src, 1, new \CV\Size(48, 48), new Scalar(104, 177, 123));
|
||||
var_export($blob);
|
||||
print PHP_EOL;
|
||||
$blob = \CV\DNN\blobFromImages([$src], 1, new \CV\Size(48, 48), new Scalar(104, 177, 123));
|
||||
var_export($blob);
|
||||
?>
|
||||
--EXPECT--
|
||||
CV\Mat::__set_state(array(
|
||||
'type' => 5,
|
||||
'rows' => -1,
|
||||
'cols' => -1,
|
||||
'dims' => 4,
|
||||
'shape' =>
|
||||
array (
|
||||
0 => 1,
|
||||
1 => 3,
|
||||
2 => 48,
|
||||
3 => 48,
|
||||
),
|
||||
))
|
||||
CV\Mat::__set_state(array(
|
||||
'type' => 5,
|
||||
'rows' => -1,
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário