CV\Scalar and CV\Size Class
Esse commit está contido em:
+13
-1
@@ -86,6 +86,18 @@ $im = imread('Obama.png',IMREAD_GRAYSCALE);
|
||||
- Mat(class)
|
||||
- __construct
|
||||
- print
|
||||
- Point(class)
|
||||
- __construct
|
||||
- print
|
||||
- Scalar(class)
|
||||
- __construct
|
||||
- print
|
||||
- Size(class)
|
||||
- __construct
|
||||
- print
|
||||
- Scalar(class)
|
||||
- __construct
|
||||
- print
|
||||
- imread(function)
|
||||
- imwrite(function)
|
||||
- namedWindow(function)
|
||||
@@ -95,6 +107,6 @@ $im = imread('Obama.png',IMREAD_GRAYSCALE);
|
||||
|
||||
## 感谢
|
||||
|
||||
感谢[韩天峰](http://rango.swoole.com/)老大的指导,
|
||||
感谢[韩天峰](https://github.com/matyhtf)老大的指导,
|
||||
感谢[盘古大叔](https://github.com/pangudashu)的[php7-internal](https://github.com/pangudashu/php7-internal)项目以及平常的指导,
|
||||
感谢`木桶技术升级交流群`和`黑夜路人技术群`、以及`PHP内核交流`的群友对技术的帮助。
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include "../../../php_opencv.h"
|
||||
#include "opencv_mat.h"
|
||||
#include "opencv_type.h"
|
||||
|
||||
zend_object_handlers opencv_mat_object_handlers;
|
||||
|
||||
@@ -42,13 +43,22 @@ void mat_free_handler(zend_object *object)
|
||||
PHP_METHOD(opencv_mat, __construct)
|
||||
{
|
||||
long rows, cols, type;
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lll", &rows, &cols, &type) == FAILURE) {
|
||||
zval *scalar_zval = NULL;
|
||||
Scalar scalar;
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lll|O", &rows, &cols, &type, &scalar_zval,opencv_scalar_ce) == FAILURE) {
|
||||
RETURN_NULL();
|
||||
}
|
||||
|
||||
opencv_mat_object *obj = Z_PHP_MAT_OBJ_P(getThis());
|
||||
if(scalar_zval!=NULL){
|
||||
opencv_scalar_object *scalar_object = Z_PHP_SCALAR_OBJ_P(scalar_zval);
|
||||
scalar = *(scalar_object->scalar);
|
||||
}else{
|
||||
scalar=Scalar(0);
|
||||
}
|
||||
Mat M((int)rows, (int)cols, (int)type);
|
||||
obj->mat = new Mat(M);
|
||||
// obj->mat = new Mat((int)rows, (int)cols, (int)type, Scalar(0));
|
||||
// obj->mat = new Mat(M);
|
||||
obj->mat = new Mat((int)rows, (int)cols, (int)type, scalar);
|
||||
//obj->mat = new Mat((int)rows, (int)cols, (int)type); //TODO Why Mat array not correct
|
||||
zend_update_property_long(opencv_mat_ce, getThis(), "rows", sizeof("rows")-1, rows);
|
||||
zend_update_property_long(opencv_mat_ce, getThis(), "cols", sizeof("cols")-1, cols);
|
||||
@@ -63,7 +73,7 @@ PHP_METHOD(opencv_mat, __construct)
|
||||
PHP_METHOD(opencv_mat, print)
|
||||
{
|
||||
opencv_mat_object *obj = Z_PHP_MAT_OBJ_P(getThis());
|
||||
std::cout <<*(obj->mat)<< std::endl;
|
||||
std::cout << format(*(obj->mat),Formatter::FMT_PYTHON) << std::endl;
|
||||
RETURN_NULL();
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ zend_class_entry *opencv_rect_ce;
|
||||
zend_object_handlers opencv_point_object_handlers;
|
||||
|
||||
/**
|
||||
* Mat __construct
|
||||
* Point __construct
|
||||
* @param execute_data
|
||||
* @param return_value
|
||||
*/
|
||||
@@ -38,7 +38,7 @@ PHP_METHOD(opencv_point, __construct)
|
||||
}
|
||||
|
||||
/**
|
||||
* print Mat data
|
||||
* print Point data
|
||||
* @param execute_data
|
||||
* @param return_value
|
||||
*/
|
||||
@@ -56,7 +56,7 @@ PHP_METHOD(opencv_point, print)
|
||||
*/
|
||||
const zend_function_entry opencv_point_methods[] = {
|
||||
PHP_ME(opencv_point, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
|
||||
// PHP_ME(opencv_point, print, NULL, ZEND_ACC_PUBLIC) //todo why Point print method can effect Mat print method
|
||||
PHP_ME(opencv_point, print, NULL, ZEND_ACC_PUBLIC) //todo why Point print method can effect Mat print method
|
||||
PHP_FE_END
|
||||
};
|
||||
/* }}} */
|
||||
@@ -97,7 +97,7 @@ void opencv_point_write_property(zval *object, zval *member, zval *value, void *
|
||||
}
|
||||
|
||||
/**
|
||||
* Type Init
|
||||
* Point Init
|
||||
*/
|
||||
void opencv_point_init(int module_number){
|
||||
zend_class_entry ce;
|
||||
@@ -109,9 +109,6 @@ void opencv_point_init(int module_number){
|
||||
zend_get_std_object_handlers(), sizeof(zend_object_handlers));
|
||||
opencv_point_object_handlers.clone_obj = NULL;
|
||||
opencv_point_object_handlers.write_property = opencv_point_write_property;
|
||||
|
||||
// zend_declare_property_null(opencv_point_ce,"type",sizeof("type") - 1,ZEND_ACC_PRIVATE);//private Mat->type
|
||||
// mat_object_handlers.free_obj = mat_free_handler;
|
||||
}
|
||||
|
||||
|
||||
@@ -124,10 +121,214 @@ void opencv_point_init(int module_number){
|
||||
* -------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
zend_object_handlers opencv_scalar_object_handlers;
|
||||
|
||||
zend_object* opencv_scalar_create_handler(zend_class_entry *type)
|
||||
{
|
||||
int size = sizeof(opencv_scalar_object);
|
||||
opencv_scalar_object *obj = (opencv_scalar_object *)ecalloc(1,size);
|
||||
memset(obj, 0, sizeof(opencv_scalar_object));
|
||||
zend_object_std_init(&obj->std, type);
|
||||
object_properties_init(&obj->std, type);
|
||||
obj->std.ce = type;
|
||||
obj->std.handlers = &opencv_scalar_object_handlers;
|
||||
return &obj->std;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Scalar __construct
|
||||
* @param execute_data
|
||||
* @param return_value
|
||||
*/
|
||||
PHP_METHOD(opencv_scalar, __construct)
|
||||
{
|
||||
long blue=0, green = 0, red = 0;//value:0~255
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|lll", &blue, &green ,&red) == FAILURE) {
|
||||
RETURN_NULL();
|
||||
}
|
||||
opencv_scalar_object *obj = Z_PHP_SCALAR_OBJ_P(getThis());
|
||||
Scalar scalar = Scalar((int)blue, (int)green, (int)red);
|
||||
obj->scalar = new Scalar(scalar);
|
||||
|
||||
zend_update_property_long(opencv_scalar_ce, getThis(), "blue", sizeof("blue")-1, obj->scalar->val[0]);
|
||||
zend_update_property_long(opencv_scalar_ce, getThis(), "green", sizeof("green")-1, obj->scalar->val[1]);
|
||||
zend_update_property_long(opencv_scalar_ce, getThis(), "red", sizeof("red")-1, obj->scalar->val[2]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* print Scalar data
|
||||
* @param execute_data
|
||||
* @param return_value
|
||||
*/
|
||||
PHP_METHOD(opencv_scalar, print)
|
||||
{
|
||||
opencv_scalar_object *obj = Z_PHP_SCALAR_OBJ_P(getThis());
|
||||
std::cout <<*(obj->scalar)<< std::endl;
|
||||
RETURN_NULL();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* opencv_point_methods[]
|
||||
*/
|
||||
const zend_function_entry opencv_scalar_methods[] = {
|
||||
PHP_ME(opencv_scalar, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
|
||||
PHP_ME(opencv_scalar, print, NULL, ZEND_ACC_PUBLIC)
|
||||
PHP_FE_END
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
|
||||
/**
|
||||
* Point Class write_property
|
||||
* @param object
|
||||
* @param member
|
||||
* @param value
|
||||
* @param cache_slot
|
||||
*/
|
||||
void opencv_scalar_write_property(zval *object, zval *member, zval *value, void **cache_slot){
|
||||
|
||||
zend_string *str = zval_get_string(member);
|
||||
char *memberName=ZSTR_VAL(str);
|
||||
opencv_scalar_object *obj = Z_PHP_SCALAR_OBJ_P(object);
|
||||
|
||||
if(strcmp(memberName, "blue") == 0 && obj->scalar->val[0]!=(int)zval_get_long(value)){
|
||||
obj->scalar->val[0]=(int)zval_get_long(value);
|
||||
}else if(strcmp(memberName, "green") == 0 && obj->scalar->val[1]!=(int)zval_get_long(value)){
|
||||
obj->scalar->val[1]=(int)zval_get_long(value);
|
||||
}else if(strcmp(memberName, "red") == 0 && obj->scalar->val[2]!=(int)zval_get_long(value)){
|
||||
obj->scalar->val[2]=(int)zval_get_long(value);
|
||||
}
|
||||
zend_string_release(str);//free zend_string not memberName(zend_string->val)
|
||||
std_object_handlers.write_property(object,member,value,cache_slot);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Scalar Init
|
||||
*/
|
||||
void opencv_scalar_init(int module_number){
|
||||
zend_class_entry ce;
|
||||
INIT_NS_CLASS_ENTRY(ce,OPENCV_NS, "Scalar", opencv_scalar_methods);
|
||||
opencv_scalar_ce = zend_register_internal_class(&ce);
|
||||
|
||||
opencv_scalar_ce->create_object = opencv_scalar_create_handler;
|
||||
memcpy(&opencv_scalar_object_handlers,
|
||||
zend_get_std_object_handlers(), sizeof(zend_object_handlers));
|
||||
opencv_scalar_object_handlers.clone_obj = NULL;
|
||||
opencv_scalar_object_handlers.write_property = opencv_scalar_write_property;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------【CV\Size】---------------------------------------
|
||||
//
|
||||
//-------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
zend_object_handlers opencv_size_object_handlers;
|
||||
|
||||
zend_object* opencv_size_create_handler(zend_class_entry *type)
|
||||
{
|
||||
int size = sizeof(opencv_size_object);
|
||||
opencv_size_object *obj = (opencv_size_object *)ecalloc(1,size);
|
||||
memset(obj, 0, sizeof(opencv_size_object));
|
||||
zend_object_std_init(&obj->std, type);
|
||||
object_properties_init(&obj->std, type);
|
||||
obj->std.ce = type;
|
||||
obj->std.handlers = &opencv_size_object_handlers;
|
||||
return &obj->std;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Size __construct
|
||||
* @param execute_data
|
||||
* @param return_value
|
||||
*/
|
||||
PHP_METHOD(opencv_size, __construct)
|
||||
{
|
||||
long width=0, height = 0;
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|ll", &width, &height) == FAILURE) {
|
||||
RETURN_NULL();
|
||||
}
|
||||
opencv_size_object *obj = Z_PHP_SIZE_OBJ_P(getThis());
|
||||
Size size = Size((int)width, (int)height);
|
||||
obj->size = new Size(size);
|
||||
|
||||
zend_update_property_long(opencv_scalar_ce, getThis(), "width", sizeof("width")-1, obj->size->width);
|
||||
zend_update_property_long(opencv_scalar_ce, getThis(), "height", sizeof("height")-1, obj->size->height);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* print Scalar data
|
||||
* @param execute_data
|
||||
* @param return_value
|
||||
*/
|
||||
PHP_METHOD(opencv_size, print)
|
||||
{
|
||||
opencv_size_object *obj = Z_PHP_SIZE_OBJ_P(getThis());
|
||||
std::cout <<*(obj->size)<< std::endl;
|
||||
RETURN_NULL();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* opencv_point_methods[]
|
||||
*/
|
||||
const zend_function_entry opencv_size_methods[] = {
|
||||
PHP_ME(opencv_size, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
|
||||
PHP_ME(opencv_size, print, NULL, ZEND_ACC_PUBLIC)
|
||||
PHP_FE_END
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
|
||||
/**
|
||||
* Point Class write_property
|
||||
* @param object
|
||||
* @param member
|
||||
* @param value
|
||||
* @param cache_slot
|
||||
*/
|
||||
void opencv_size_write_property(zval *object, zval *member, zval *value, void **cache_slot){
|
||||
|
||||
zend_string *str = zval_get_string(member);
|
||||
char *memberName=ZSTR_VAL(str);
|
||||
opencv_size_object *obj = Z_PHP_SIZE_OBJ_P(object);
|
||||
|
||||
if(strcmp(memberName, "width") == 0 && obj->size->width!=(int)zval_get_long(value)){
|
||||
obj->size->width=(int)zval_get_long(value);
|
||||
}else if(strcmp(memberName, "height") == 0 && obj->size->height!=(int)zval_get_long(value)){
|
||||
obj->size->height=(int)zval_get_long(value);
|
||||
}
|
||||
zend_string_release(str);//free zend_string not memberName(zend_string->val)
|
||||
std_object_handlers.write_property(object,member,value,cache_slot);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Scalar Init
|
||||
*/
|
||||
void opencv_size_init(int module_number){
|
||||
zend_class_entry ce;
|
||||
INIT_NS_CLASS_ENTRY(ce,OPENCV_NS, "Size", opencv_size_methods);
|
||||
opencv_size_ce = zend_register_internal_class(&ce);
|
||||
|
||||
opencv_size_ce->create_object = opencv_size_create_handler;
|
||||
memcpy(&opencv_size_object_handlers,
|
||||
zend_get_std_object_handlers(), sizeof(zend_object_handlers));
|
||||
opencv_size_object_handlers.clone_obj = NULL;
|
||||
opencv_size_object_handlers.write_property = opencv_size_write_property;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------【CV\Rect】---------------------------------------
|
||||
//
|
||||
//-------------------------------------------------------------------------------------
|
||||
@@ -138,4 +339,6 @@ void opencv_point_init(int module_number){
|
||||
*/
|
||||
void opencv_type_init(int module_number){
|
||||
opencv_point_init(module_number);
|
||||
opencv_scalar_init(module_number);
|
||||
opencv_size_init(module_number);
|
||||
}
|
||||
+10
-8
@@ -5,22 +5,24 @@ Mat __construct
|
||||
--FILE--
|
||||
<?php
|
||||
use CV\Mat;
|
||||
$mat = new Mat(5,5,1);
|
||||
use CV\Scalar;
|
||||
$scalar = new Scalar(255,100,100);
|
||||
$mat = new Mat(5,5,CV_8UC3,$scalar);
|
||||
//$mat->rows=10;
|
||||
var_dump($mat);
|
||||
$mat->print();
|
||||
?>
|
||||
--EXPECT--
|
||||
object(CV\Mat)#1 (3) {
|
||||
object(CV\Mat)#2 (3) {
|
||||
["type":"CV\Mat":private]=>
|
||||
int(1)
|
||||
int(16)
|
||||
["rows"]=>
|
||||
int(5)
|
||||
["cols"]=>
|
||||
int(5)
|
||||
}
|
||||
[ 0, 0, 0, 0, 0;
|
||||
0, 0, 0, 0, 0;
|
||||
0, 0, 0, 0, 0;
|
||||
0, 0, 0, 0, 0;
|
||||
0, 0, 0, 0, 0]
|
||||
[[[255, 100, 100], [255, 100, 100], [255, 100, 100], [255, 100, 100], [255, 100, 100]],
|
||||
[[255, 100, 100], [255, 100, 100], [255, 100, 100], [255, 100, 100], [255, 100, 100]],
|
||||
[[255, 100, 100], [255, 100, 100], [255, 100, 100], [255, 100, 100], [255, 100, 100]],
|
||||
[[255, 100, 100], [255, 100, 100], [255, 100, 100], [255, 100, 100], [255, 100, 100]],
|
||||
[[255, 100, 100], [255, 100, 100], [255, 100, 100], [255, 100, 100], [255, 100, 100]]]
|
||||
@@ -1,5 +1,5 @@
|
||||
--TEST--
|
||||
Mat __construct
|
||||
Exception
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("opencv")) print "skip"; ?>
|
||||
--FILE--
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário