|
31 | 31 | #include "../../BOCV_util.h" |
32 | 32 |
|
33 | 33 |
|
34 | | -static bNodeSocketTemplate cmp_node_cvDilate_in[]= { |
35 | | - { SOCK_OCV_IMAGE, 1, "cvImage", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, |
36 | | - { SOCK_FLOAT, 1, "Iterations", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 15.0f}, |
37 | | - { -1, 0, "" } |
| 34 | +static bNodeSocketTemplate cmp_node_cvDilate_in[] = { |
| 35 | + { SOCK_RGBA, 1, "cvImage", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, |
| 36 | + { SOCK_INT, 1, "Iterations", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 15.0f}, |
| 37 | + { SOCK_FLOAT, 1, "Structuring element", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 15.0f}, |
| 38 | + { -1, 0, ""} |
38 | 39 | }; |
39 | | -static bNodeSocketTemplate cmp_node_cvDilate_out[]= { |
40 | | - { SOCK_OCV_IMAGE, 0, "cvImage", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f}, |
41 | | - { -1, 0, "" } |
| 40 | +static bNodeSocketTemplate cmp_node_cvDilate_out[] = { |
| 41 | + { SOCK_RGBA, 0, "cvImage", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f}, |
| 42 | + { -1, 0, ""} |
42 | 43 | }; |
43 | 44 |
|
44 | | -static void node_composit_exec_cvDilate(void *data, bNode *node, bNodeStack **in, bNodeStack **out) |
45 | | -{ |
46 | | - int iterations; |
47 | | - IplImage *image, *dst; |
48 | | - CV_FUNCNAME( "cvDilate" ); |
49 | | - //TODO: Use atach buffers |
50 | | - if(out[0]->hasoutput==0) return; |
51 | | - |
52 | | - cvSetErrMode(1); //Parent mode error |
53 | | - __CV_BEGIN__; |
| 45 | +static void node_composit_exec_cvDilate(void *data, bNode *node, bNodeStack **in, bNodeStack **out) { |
| 46 | + int iterations; |
| 47 | + IplImage *image, *dst; |
| 48 | + IplConvKernel *kernel; |
| 49 | + CompBuf* dst_buf; |
| 50 | + int *valuesKernel, i; |
| 51 | + |
| 52 | + if (out[0]->hasoutput == 0) return; |
| 53 | + |
| 54 | + if (in[0]->data) { |
| 55 | + |
| 56 | + image = BOCV_IplImage_attach(in[0]->data); |
| 57 | + dst_buf = alloc_compbuf(image->width, image->height, image->nChannels, 1); |
| 58 | + dst = BOCV_IplImage_attach(dst_buf); |
| 59 | + iterations = (int) in[1]->vec[0]; |
| 60 | + if (in[2]->data) { |
| 61 | + CompBuf* kernel_buf= in[2]->data; |
| 62 | + valuesKernel= malloc(kernel_buf->x*kernel_buf->y * sizeof(int)); |
| 63 | + //Convert kernel to float array buf to send via socket |
| 64 | + for(i=0; i< kernel_buf->x*kernel_buf->y; i++){ |
| 65 | + valuesKernel[i]= (int)kernel_buf->rect[i]; |
| 66 | + } |
| 67 | + kernel= cvCreateStructuringElementEx( |
| 68 | + kernel_buf->x, |
| 69 | + kernel_buf->y, |
| 70 | + kernel_buf->x/2, |
| 71 | + kernel_buf->y/2, |
| 72 | + CV_SHAPE_CUSTOM, |
| 73 | + valuesKernel ); |
| 74 | + cvDilate(image, dst, kernel, iterations); |
| 75 | + }else |
| 76 | + cvDilate(image, dst, 0, iterations); |
| 77 | + out[0]->data = dst_buf; |
| 78 | + |
| 79 | + BOCV_IplImage_detach(dst); |
| 80 | + BOCV_IplImage_detach(image); |
| 81 | + } |
54 | 82 |
|
55 | | - CV_CALL(image = in[0]->data); |
56 | | - dst= cvCreateImage(cvSize(image->width,image->height),IPL_DEPTH_8U,1); |
57 | | - CV_CALL(iterations=(int)in[1]->vec[0]); |
58 | | - if(image->nChannels>1) |
59 | | - CV_ERROR(CV_BadNumChannels,"The number of channels of the source image isn't 1" ); |
60 | | - |
61 | | - if(in[0]->data){ |
62 | | - CV_CALL(cvDilate(image,dst,0,iterations)); |
63 | | - out[0]->data= dst; |
64 | | - } |
65 | | - __CV_END__; |
66 | 83 | } |
67 | 84 |
|
| 85 | +void register_node_type_cmp_cvdilate(ListBase *lb) { |
| 86 | + static bNodeType ntype; |
| 87 | + |
| 88 | + node_type_base(&ntype, CMP_NODE_CVDILATE, "OpenCV - Dilate", NODE_CLASS_OCV_IMAGEPROCESS, NODE_OPTIONS); |
| 89 | + node_type_socket_templates(&ntype, cmp_node_cvDilate_in, cmp_node_cvDilate_out); |
| 90 | + node_type_size(&ntype, 150, 80, 250); |
| 91 | + node_type_exec(&ntype, node_composit_exec_cvDilate); |
68 | 92 |
|
69 | | -void register_node_type_cmp_cvdilate(ListBase *lb) |
70 | | -{ |
71 | | - static bNodeType ntype; |
72 | | - |
73 | | - node_type_base(&ntype, CMP_NODE_CVDILATE, "OpenCV - Dilate", NODE_CLASS_OCV_IMAGEPROCESS, NODE_OPTIONS); |
74 | | - node_type_socket_templates(&ntype,cmp_node_cvDilate_in, cmp_node_cvDilate_out); |
75 | | - node_type_size(&ntype, 150, 80, 250); |
76 | | - node_type_exec(&ntype, node_composit_exec_cvDilate); |
77 | | - |
78 | | - nodeRegisterType(lb, &ntype); |
| 93 | + nodeRegisterType(lb, &ntype); |
79 | 94 | } |
80 | 95 |
|
81 | 96 |
|
0 commit comments