Skip to content

Commit 868c5d6

Browse files
committed
Merge branch 'dev'
2 parents a651173 + be5225e commit 868c5d6

File tree

10 files changed

+236
-23
lines changed

10 files changed

+236
-23
lines changed

.travis.yml

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,32 +16,51 @@ notifications:
1616
email: hihozhou@gmail.com
1717

1818
before_install:
19-
- sudo apt-get update
19+
- sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
20+
- sudo apt-get -qq update
21+
- sudo apt-get install gcc-4.8 -y -qq
22+
- sudo apt-get install g++-4.8 -y -qq
23+
2024
install:
2125
# OpenCV dependencies - Details available at: http://docs.opencv.org/trunk/doc/tutorials/introduction/linux_install/linux_install.html
2226
- sudo apt-get install -y build-essential
23-
- sudo apt-get install -y cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
24-
- sudo apt-get install -y python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
27+
# Install cmake
28+
- wget https://cmake.org/files/v3.8/cmake-3.8.2.tar.gz
29+
- tar -zxf cmake-3.8.2.tar.gz
30+
- cd cmake-3.8.2
31+
- ./configure
32+
- make
33+
- sudo make install
34+
- cd ..
35+
36+
- sudo apt-get install -y git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev -qq
37+
- sudo apt-get install -y python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev -qq
38+
39+
40+
41+
42+
2543
#- sudo apt-get install -y gcc-4.8 g++-4.8
2644

2745
# Download OpenCV-contrib v3.3.0-rc
28-
- curl -sL https://github.com/Itseez/opencv_contrib/archive/3.3.0-rc.zip > opencv_contrib.zip
29-
- unzip opencv_contrib.zip
30-
#- cd opencv_contrib-3.3.0-rc
46+
- git clone https://github.com/opencv/opencv_contrib.git
47+
- cd opencv_contrib
48+
- git checkout 3.3.0-rc
49+
- cd ..
3150

32-
# Download OpenCV v3.3.0-rc .zip file and extract.
33-
- curl -sL https://github.com/Itseez/opencv/archive/3.3.0-rc.zip > opencv.zip
34-
- unzip opencv.zip
35-
- cd opencv-3.3.0-rc
51+
# Download OpenCV v3.3.0-rc
52+
- git clone https://github.com/opencv/opencv.git
53+
- cd opencv
54+
- git checkout 3.3.0-rc
3655

3756
# Create a new 'build' folder.
3857
- mkdir build
3958
- cd build
4059

4160
# Set build instructions for Ubuntu distro.
42-
- cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.3.0-rc/modules ..
61+
- cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..
4362
# Run 'make' with four threads.
44-
- make -j4
63+
- make -j6
4564

4665
# Install to OS.
4766
- sudo make install
@@ -54,9 +73,17 @@ install:
5473
# We need to return to the repo "root" folder, so we can then 'cd' into the C++ project folder.
5574
- cd ../../
5675

76+
#addons:
77+
# apt:
78+
# sources:
79+
# - george-edison55-precise-backports
80+
# packages:
81+
# - cmake-data
82+
# - cmake
83+
5784
#Compile
5885
before_script:
59-
- ./travis/compile.sh
86+
- ./travis/compile.sh
6087

6188
script:
6289
- exit 0

opencv.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,13 +199,16 @@ const zend_function_entry opencv_functions[] = {
199199
ZEND_NS_NAMED_FE(OPENCV_NS, split, ZEND_FN(opencv_split), NULL)
200200
ZEND_NS_NAMED_FE(OPENCV_NS, merge, ZEND_FN(opencv_merge), opencv_merge_arginfo)
201201
ZEND_NS_NAMED_FE(OPENCV_NS, createTrackbar, ZEND_FN(opencv_create_trackbar), NULL)
202+
ZEND_NS_NAMED_FE(OPENCV_NS, destroyWindow, ZEND_FN(opencv_destroy_window), NULL)
202203
ZEND_NS_NAMED_FE(OPENCV_NS, getOptimalDFTSize, ZEND_FN(opencv_get_optimal_dft_size), NULL)
203204
ZEND_NS_NAMED_FE(OPENCV_NS, copyMakeBorder, ZEND_FN(opencv_copy_make_border), opencv_copy_make_border_arginfo)
204205
ZEND_NS_NAMED_FE(OPENCV_NS, dft, ZEND_FN(opencv_dft), opencv_dft_arginfo)
205206
ZEND_NS_NAMED_FE(OPENCV_NS, magnitude, ZEND_FN(opencv_magnitude), opencv_magnitude_arginfo)
206207
ZEND_NS_NAMED_FE(OPENCV_NS, add, ZEND_FN(opencv_add), opencv_add_arginfo)
207208
ZEND_NS_NAMED_FE(OPENCV_NS, log, ZEND_FN(opencv_log), opencv_log_arginfo)
208209
ZEND_NS_NAMED_FE(OPENCV_NS, normalize, ZEND_FN(opencv_normalize), opencv_normalize_arginfo)
210+
ZEND_NS_NAMED_FE(OPENCV_NS, equalizeHist, ZEND_FN(opencv_equalize_hist), opencv_equalize_hist_arginfo)
211+
ZEND_NS_NAMED_FE(OPENCV_NS, resize, ZEND_FN(opencv_resize), opencv_resize_arginfo)
209212
PHP_FE_END /* Must be the last line in opencv_functions[] */
210213
};
211214
/* }}} */

source/opencv2/opencv_highgui.cc

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "../../php_opencv.h"
1919
#include "opencv_highgui.h"
2020
#include "core/opencv_mat.h"
21+
#include "../../opencv_exception.h"
2122

2223

2324
#ifdef HAVE_CONFIG_H
@@ -56,8 +57,8 @@ PHP_FUNCTION(opencv_wait_key){
5657
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &delay) == FAILURE) {
5758
RETURN_NULL();
5859
}
59-
waitKey((int)(delay*1000));//seconds
60-
RETURN_NULL();
60+
int key = waitKey((int)delay);//millisecond
61+
RETURN_LONG(key);
6162
}
6263

6364
/**
@@ -164,6 +165,25 @@ PHP_FUNCTION(opencv_create_trackbar){
164165

165166
}
166167

168+
PHP_FUNCTION(opencv_destroy_window){
169+
char *winname;
170+
long winname_len;
171+
172+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &winname,&winname_len) == FAILURE) {
173+
return;
174+
}
175+
176+
try{
177+
destroyWindow(winname);
178+
}catch (Exception e){
179+
opencv_throw_exception(e.what());
180+
}
181+
182+
RETURN_NULL();
183+
184+
185+
}
186+
167187

168188

169189
void opencv_highgui_init(int module_number)

source/opencv2/opencv_highgui.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@ PHP_FUNCTION(opencv_imshow);
2424
PHP_FUNCTION(opencv_wait_key);
2525
PHP_FUNCTION(opencv_named_window);
2626
PHP_FUNCTION(opencv_create_trackbar);
27+
PHP_FUNCTION(opencv_destroy_window);
2728

2829
#endif //OPENCV_OPENCV_HIGHGUI_H

source/opencv2/opencv_imgcodecs.cc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,11 @@ PHP_FUNCTION(opencv_imwrite){
7272
RETURN_NULL();
7373
}
7474
opencv_mat_object *obj = Z_PHP_MAT_OBJ_P(object);
75-
//todo throw exception can't save
76-
imwrite(filename,*(obj->mat));
75+
try {
76+
imwrite(filename,*obj->mat);
77+
}catch (Exception e){
78+
opencv_throw_exception(e.what());
79+
}
7780
RETURN_TRUE;
7881
}
7982

source/opencv2/opencv_imgproc.cc

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <opencv2/imgproc.hpp>
2020
#include "core/opencv_mat.h"
2121
#include "core/opencv_type.h"
22+
#include "../../opencv_exception.h"
2223

2324

2425
void opencv_imgproc_init(int module_number)
@@ -225,6 +226,78 @@ PHP_FUNCTION(opencv_rectangle_by_rect){
225226
}
226227

227228

229+
/**
230+
* CV\equalizeHist
231+
* @param execute_data
232+
* @param return_value
233+
*/
234+
PHP_FUNCTION(opencv_equalize_hist){
235+
236+
zval *src_zval, *dst_zval;
237+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz",
238+
&src_zval, opencv_mat_ce,
239+
&dst_zval) == FAILURE) {
240+
RETURN_NULL();
241+
}
242+
243+
opencv_mat_object *src_obj, *dst_object;
244+
src_obj = Z_PHP_MAT_OBJ_P(src_zval);
245+
zval *dst_real_zval = Z_REFVAL_P(dst_zval);
246+
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval)==opencv_mat_ce){
247+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
248+
} else{
249+
zval instance;
250+
Mat dst;
251+
object_init_ex(&instance,opencv_mat_ce);
252+
ZVAL_COPY_VALUE(dst_real_zval, &instance);
253+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
254+
dst_object->mat = new Mat(dst);
255+
}
256+
try {
257+
equalizeHist(*src_obj->mat, *dst_object->mat);
258+
}catch (Exception e){
259+
opencv_throw_exception(e.what());
260+
}
261+
RETURN_NULL();
262+
}
263+
264+
265+
PHP_FUNCTION(opencv_resize){
266+
267+
zval *src_zval, *dst_zval, *dsize_zval;
268+
double fx = 0, fy = 0;
269+
long interpolation = INTER_LINEAR;
270+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "OzO|ddl",
271+
&src_zval, opencv_mat_ce,
272+
&dst_zval,
273+
&dsize_zval, opencv_size_ce,
274+
&fx, &fy, &interpolation
275+
) == FAILURE) {
276+
RETURN_NULL();
277+
}
278+
279+
opencv_mat_object *src_obj, *dst_object;
280+
src_obj = Z_PHP_MAT_OBJ_P(src_zval);
281+
zval *dst_real_zval = Z_REFVAL_P(dst_zval);
282+
if(Z_TYPE_P(dst_real_zval) == IS_OBJECT && Z_OBJCE_P(dst_real_zval)==opencv_mat_ce){
283+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
284+
} else{
285+
zval instance;
286+
Mat dst;
287+
object_init_ex(&instance,opencv_mat_ce);
288+
ZVAL_COPY_VALUE(dst_real_zval, &instance);
289+
dst_object = Z_PHP_MAT_OBJ_P(dst_real_zval);
290+
dst_object->mat = new Mat(dst);
291+
}
292+
opencv_size_object *dsize_obj = Z_PHP_SIZE_OBJ_P(dsize_zval);
293+
try {
294+
resize(*src_obj->mat, *dst_object->mat, *dsize_obj->size , fx, fy, (int)interpolation);
295+
}catch (Exception e){
296+
opencv_throw_exception(e.what());
297+
}
298+
RETURN_NULL();
299+
}
300+
228301
/**
229302
* color conversion code in CV\cvtColor,opencv enum ColorConversionCodes
230303
* @param module_number

source/opencv2/opencv_imgproc.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,20 @@ PHP_FUNCTION(opencv_rectangle);
2929
PHP_FUNCTION(opencv_rectangle_by_point);
3030
PHP_FUNCTION(opencv_rectangle_by_rect);
3131

32+
ZEND_BEGIN_ARG_INFO_EX(opencv_equalize_hist_arginfo, 0, 0, 2)
33+
ZEND_ARG_INFO(0, src)
34+
ZEND_ARG_INFO(1, dst)
35+
ZEND_END_ARG_INFO()
36+
PHP_FUNCTION(opencv_equalize_hist);
37+
38+
ZEND_BEGIN_ARG_INFO_EX(opencv_resize_arginfo, 0, 0, 6)
39+
ZEND_ARG_INFO(0, src)
40+
ZEND_ARG_INFO(1, dst)
41+
ZEND_ARG_INFO(0, dsize_zval)
42+
ZEND_ARG_INFO(0, fx)
43+
ZEND_ARG_INFO(0, fy)
44+
ZEND_ARG_INFO(0, interpolation)
45+
ZEND_END_ARG_INFO()
46+
PHP_FUNCTION(opencv_resize);
47+
3248
#endif //OPENCV_OPENCV_IMGPROC_H

source/opencv2/opencv_objdetect.cc

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,10 @@ PHP_METHOD(opencv_cascade_classifier, detect_multi_scale)
112112
min_size, max_size);
113113

114114
zval *objects_real_zval = Z_REFVAL_P(objects_zval);
115-
zval instance;
116-
array_init(&instance);
115+
116+
zval_dtor(objects_real_zval);//if real_zval value not eq null ,free real_zval to avoid memory leaks detected
117+
118+
array_init(objects_real_zval);
117119
for(unsigned long i=0; i < objects.size(); i++){
118120
zval OPENCV_CONNECT(zval,i);
119121
Rect OPENCV_CONNECT(rect,i);
@@ -123,10 +125,10 @@ PHP_METHOD(opencv_cascade_classifier, detect_multi_scale)
123125
OPENCV_CONNECT(rect,i) = objects.at(i);
124126
OPENCV_CONNECT(rect_object,i)->rect = new Rect(OPENCV_CONNECT(rect,i));
125127
opencv_rect_update_property_by_c_rect(&OPENCV_CONNECT(zval,i), OPENCV_CONNECT(rect_object,i)->rect);
126-
add_next_index_zval(&instance,&OPENCV_CONNECT(zval,i));
127128

129+
add_next_index_zval(objects_real_zval,&OPENCV_CONNECT(zval,i));
128130
}
129-
ZVAL_COPY_VALUE(objects_real_zval, &instance);
131+
130132
RETURN_NULL();
131133
}
132134

@@ -167,6 +169,16 @@ void opencv_cascade_classifier_init(int module_number){
167169
opencv_cascade_classifier_object_handlers.free_obj = opencv_cascade_classifier_free_obj;
168170
}
169171

172+
void opencv_objdetect_constants_init(int module_number)
173+
{
174+
175+
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_HAAR_DO_CANNY_PRUNING", CV_HAAR_DO_CANNY_PRUNING, CONST_CS | CONST_PERSISTENT);
176+
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_HAAR_SCALE_IMAGE", CV_HAAR_SCALE_IMAGE, CONST_CS | CONST_PERSISTENT);
177+
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_HAAR_FIND_BIGGEST_OBJECT", CV_HAAR_FIND_BIGGEST_OBJECT, CONST_CS | CONST_PERSISTENT);
178+
REGISTER_NS_LONG_CONSTANT(OPENCV_NS, "CV_HAAR_DO_ROUGH_SEARCH", CV_HAAR_DO_ROUGH_SEARCH, CONST_CS | CONST_PERSISTENT);
179+
}
180+
170181
void opencv_objdetect_init(int module_number){
171182
opencv_cascade_classifier_init(module_number);
183+
opencv_objdetect_constants_init(module_number);
172184
}

source/opencv2/opencv_videoio.cc

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "../../php_opencv.h"
1717
#include "opencv_videoio.h"
1818
#include "../../opencv_exception.h"
19+
#include "core/opencv_mat.h"
1920

2021
zend_class_entry *opencv_video_capture_ce;
2122

@@ -95,7 +96,6 @@ PHP_METHOD(opencv_video_capture, open)
9596
}
9697
opencv_video_capture_object *obj = Z_PHP_VIDEO_CAPTURE_P(getThis());
9798
char *error_message;
98-
VideoCapture *videoCapture;
9999
again:
100100
switch (Z_TYPE_P(zval1)) {
101101
case IS_LONG:
@@ -133,8 +133,44 @@ PHP_METHOD(opencv_video_capture, open)
133133
free(error_message);
134134
break;
135135
}
136+
}
136137

137-
obj->videoCapture = videoCapture;
138+
139+
PHP_METHOD(opencv_video_capture, is_opened)
140+
{
141+
opencv_video_capture_object *obj = Z_PHP_VIDEO_CAPTURE_P(getThis());
142+
bool is_opend = obj->videoCapture->isOpened();
143+
RETURN_BOOL(is_opend);
144+
}
145+
146+
ZEND_BEGIN_ARG_INFO_EX(opencv_video_capture_read_arginfo, 0, 0, 1)
147+
ZEND_ARG_INFO(1, mat)
148+
ZEND_END_ARG_INFO()
149+
150+
PHP_METHOD(opencv_video_capture, read)
151+
{
152+
zval *mat_zval = NULL;
153+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &mat_zval) == FAILURE) {
154+
RETURN_NULL();
155+
}
156+
157+
zval *mat_real_zval = Z_REFVAL_P(mat_zval);
158+
opencv_mat_object *real_object;
159+
Mat mat;
160+
if(Z_TYPE_P(mat_real_zval) == IS_OBJECT && Z_OBJCE_P(mat_real_zval)==opencv_mat_ce){
161+
real_object = Z_PHP_MAT_OBJ_P(mat_real_zval);
162+
}else{
163+
zval instance;
164+
165+
object_init_ex(&instance,opencv_mat_ce);
166+
ZVAL_COPY_VALUE(mat_real_zval, &instance);// Cover dst_real_zval by Mat object
167+
real_object = Z_PHP_MAT_OBJ_P(mat_real_zval);
168+
}
169+
opencv_video_capture_object *this_object = Z_PHP_VIDEO_CAPTURE_P(getThis());
170+
*(this_object->videoCapture) >> mat;
171+
real_object->mat = new Mat(mat);
172+
opencv_mat_update_property_by_c_mat(mat_real_zval, real_object->mat);
173+
RETURN_NULL();
138174
}
139175

140176
/**
@@ -143,6 +179,8 @@ PHP_METHOD(opencv_video_capture, open)
143179
const zend_function_entry opencv_video_capture_methods[] = {
144180
PHP_ME(opencv_video_capture, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
145181
PHP_ME(opencv_video_capture, open, NULL, ZEND_ACC_PUBLIC)
182+
PHP_MALIAS(opencv_video_capture, isOpened ,is_opened, NULL, ZEND_ACC_PUBLIC)
183+
PHP_ME(opencv_video_capture, read, opencv_video_capture_read_arginfo, ZEND_ACC_PUBLIC)
146184
PHP_FE_END
147185
};
148186
/* }}} */

0 commit comments

Comments
 (0)