add DNN::blobFromImages function

Esse commit está contido em:
Junker
2021-08-09 00:15:08 +07:00
commit d72b11145c
4 arquivos alterados com 61 adições e 1 exclusões
+1
Ver Arquivo
@@ -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)
+42
Ver Arquivo
@@ -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;
+1
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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,