carray-opencv 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2a5fe06c80b4476c042c95a8990d72743dc5b274
4
+ data.tar.gz: 274e95c4915ec4405a0e536b28c528327f0508c0
5
+ SHA512:
6
+ metadata.gz: e801857bc82d466a31e98b574c2a0d37c9f8273a7a17432aa6525f1f891e7044f7778351ebaa09b10ab557850b6c7243c3250f6b37ada133ee8490589afd07c3
7
+ data.tar.gz: 914a6e1080e1e78d556661f70cd0850631cf9aa9a943b249cb536c4d52f8f9a8ce2e172fc7867008e207a338affd34302a25d2a29aadcb2db8cd954d2ebf2eb7
data/README.md ADDED
File without changes
@@ -0,0 +1,23 @@
1
+
2
+ Gem::Specification::new do |s|
3
+ version = "1.0.0"
4
+
5
+ files = Dir.glob("**/*") - [
6
+ Dir.glob("carray*.gem"),
7
+ ].flatten
8
+
9
+ s.platform = Gem::Platform::RUBY
10
+ s.name = "carray-opencv"
11
+ s.summary = "Extension for converting OpenCV::IplImage to/from CArray"
12
+ s.description = <<-HERE
13
+ Extension for converting OpenCV::IplImage to/from CArray
14
+ HERE
15
+ s.version = version
16
+ s.author = "Hiroki Motoyoshi"
17
+ s.email = ""
18
+ s.homepage = 'https://github.com/himotoyoshi/carray-opencv'
19
+ s.files = files
20
+ s.extensions = [ "extconf.rb" ]
21
+ s.has_rdoc = false
22
+ s.required_ruby_version = ">= 1.8.1"
23
+ end
data/carray_opencv.c ADDED
@@ -0,0 +1,123 @@
1
+ #include "opencv2/core/core_c.h"
2
+ #include "carray.h"
3
+
4
+ static VALUE mOpenCV;
5
+ static VALUE cCvMat, cIplImage;
6
+
7
+ static VALUE
8
+ rb_iplimage_ca (VALUE self)
9
+ {
10
+ IplImage *image;
11
+ int dim[3];
12
+ int data_type = CA_UINT8;
13
+
14
+ Data_Get_Struct(self, IplImage, image);
15
+
16
+ switch (image->depth) {
17
+ case IPL_DEPTH_8U:
18
+ data_type = CA_UINT8;
19
+ break;
20
+ case IPL_DEPTH_8S:
21
+ data_type = CA_INT8;
22
+ break;
23
+ case IPL_DEPTH_16U:
24
+ data_type = CA_UINT16;
25
+ break;
26
+ case IPL_DEPTH_16S:
27
+ data_type = CA_INT16;
28
+ break;
29
+ case IPL_DEPTH_32S:
30
+ data_type = CA_INT32;
31
+ break;
32
+ case IPL_DEPTH_32F:
33
+ data_type = CA_FLOAT32;
34
+ break;
35
+ case IPL_DEPTH_64F:
36
+ data_type = CA_FLOAT64;
37
+ break;
38
+ }
39
+
40
+ dim[0] = image->height;
41
+ dim[1] = image->widthStep/image->nChannels;
42
+ dim[2] = image->nChannels;
43
+
44
+ return rb_carray_wrap_ptr(data_type, 3, dim, 0, NULL, image->imageData, self);
45
+ }
46
+
47
+ static VALUE
48
+ rb_cvmat_ca (VALUE self)
49
+ {
50
+ CvMat *mat;
51
+ int dim[3];
52
+ int data_type = CA_UINT8;
53
+
54
+ Data_Get_Struct(self, CvMat, mat);
55
+
56
+ switch (CV_MAT_TYPE(mat->type)) {
57
+ case CV_8U:
58
+ data_type = CA_UINT8;
59
+ break;
60
+ case CV_8S:
61
+ data_type = CA_INT8;
62
+ break;
63
+ case CV_16U:
64
+ data_type = CA_UINT16;
65
+ break;
66
+ case CV_16S:
67
+ data_type = CA_INT16;
68
+ break;
69
+ case CV_32S:
70
+ data_type = CA_INT32;
71
+ break;
72
+ case CV_32F:
73
+ data_type = CA_FLOAT32;
74
+ break;
75
+ case CV_64F:
76
+ data_type = CA_FLOAT64;
77
+ break;
78
+ }
79
+
80
+ dim[0] = mat->rows;
81
+ dim[1] = mat->cols;
82
+ dim[2] = CV_MAT_CN(mat->type);
83
+
84
+ return rb_carray_wrap_ptr(data_type, 3, dim, 0, NULL, (char *) mat->data.ptr, self);
85
+ }
86
+
87
+
88
+ static VALUE
89
+ rb_cvmat_image (VALUE self)
90
+ {
91
+ volatile VALUE obj;
92
+ IplImage *image;
93
+ CvMat *mat;
94
+ int type;
95
+ int channels;
96
+
97
+ Data_Get_Struct(self, CvMat, mat);
98
+
99
+ type = CV_MAT_TYPE(mat->type);
100
+ channels = CV_MAT_CN(mat->type);
101
+
102
+ obj = rb_funcall(cIplImage, rb_intern("new"), 3,
103
+ INT2FIX(mat->cols), INT2FIX(mat->rows), INT2FIX(type), INT2FIX(channels));
104
+ Data_Get_Struct(obj, IplImage, image);
105
+
106
+ cvCopy(mat, image, NULL);
107
+
108
+ return obj;
109
+ }
110
+
111
+
112
+ void
113
+ Init_carray_opencv ()
114
+ {
115
+ mOpenCV = rb_const_get(rb_cObject, rb_intern("OpenCV"));
116
+ cCvMat = rb_const_get(mOpenCV, rb_intern("CvMat"));
117
+ cIplImage = rb_const_get(mOpenCV, rb_intern("IplImage"));
118
+
119
+ rb_define_method(cIplImage, "ca", rb_iplimage_ca, 0);
120
+ rb_define_method(cCvMat, "ca", rb_cvmat_ca, 0);
121
+ rb_define_method(cCvMat, "image", rb_cvmat_image, 0);
122
+
123
+ }
data/extconf.rb ADDED
@@ -0,0 +1,8 @@
1
+ require "mkmf"
2
+ require "carray/mkmf"
3
+
4
+ dir_config("opencv", possible_includes, possible_libs)
5
+
6
+ if have_carray() and have_header("opencv2/core/core_c.h")
7
+ create_makefile("carray/carray_opencv")
8
+ end
@@ -0,0 +1,3 @@
1
+ require "carray"
2
+ require "carray/carray_opencv"
3
+ require "carray/graphics/opencv"
@@ -0,0 +1,158 @@
1
+ require "opencv"
2
+ require 'carray'
3
+ require 'carray/carray_opencv'
4
+
5
+ class OpenCV::CvMat
6
+
7
+ def to_ca
8
+ return self.ca.to_ca
9
+ end
10
+
11
+ def from_ca (ca)
12
+ self.ca[] = ca
13
+ return self
14
+ end
15
+
16
+ end
17
+
18
+ class CArray
19
+
20
+ def to_cvmat (type = nil)
21
+ if type
22
+ case type
23
+ when :cv8u
24
+ ca_type = CA_UINT8
25
+ when :cv8s
26
+ ca_type = CA_INT8
27
+ when :cv16u
28
+ ca_type = CA_UINT16
29
+ when :cv16s
30
+ ca_type = CA_INT16
31
+ when :cv32s
32
+ ca_type = CA_INT32
33
+ when :cv32f
34
+ ca_type = CA_FLOAT32
35
+ when :cv64f
36
+ ca_type = CA_FLOAT64
37
+ else
38
+ raise "invalid CvMat type"
39
+ end
40
+ case self.rank
41
+ when 2
42
+ obj = OpenCV::CvMat.new(self.dim0, self.dim1, type, 1)
43
+ when 3
44
+ obj = OpenCV::CvMat.new(self.dim0, self.dim1, type, self.dim2)
45
+ else
46
+ raise "invalid CArray rank"
47
+ end
48
+ obj.ca[] = self.as_type(ca_type)
49
+ return obj
50
+ else
51
+ case data_type
52
+ when CA_UINT8
53
+ type = :cv8u
54
+ when CA_INT8
55
+ type = :cv8s
56
+ when CA_UINT16
57
+ type = :cv16u
58
+ when CA_INT16
59
+ type = :cv16s
60
+ when CA_INT32
61
+ type = :cv32s
62
+ when CA_FLOAT32
63
+ type = :cv32f
64
+ when CA_FLOAT64
65
+ type = :cv64f
66
+ else
67
+ raise "invalid CArray type"
68
+ end
69
+ case self.rank
70
+ when 2
71
+ obj = OpenCV::CvMat.new(self.dim0, self.dim1, type, 1)
72
+ when 3
73
+ obj = OpenCV::CvMat.new(self.dim0, self.dim1, type, self.dim2)
74
+ else
75
+ raise "invalid CArray rank"
76
+ end
77
+ obj.ca[] = self
78
+ return obj
79
+ end
80
+
81
+ end
82
+
83
+ def to_iplimage (type=nil)
84
+ if type
85
+ case type
86
+ when :cv8u
87
+ ca_type = CA_UINT8
88
+ when :cv8s
89
+ ca_type = CA_INT8
90
+ when :cv16u
91
+ ca_type = CA_UINT16
92
+ when :cv16s
93
+ ca_type = CA_INT16
94
+ when :cv32s
95
+ ca_type = CA_INT32
96
+ when :cv32f
97
+ ca_type = CA_FLOAT32
98
+ when :cv64f
99
+ ca_type = CA_FLOAT64
100
+ else
101
+ raise "invalid CvMat type"
102
+ end
103
+ case self.rank
104
+ when 2
105
+ obj = OpenCV::IplImage.new(self.dim1, self.dim0, type, 1)
106
+ when 3
107
+ obj = OpenCV::IplImage.new(self.dim1, self.dim0, type, self.dim2)
108
+ else
109
+ raise "invalid CArray rank"
110
+ end
111
+ obj.ca[] = self.as_type(ca_type)
112
+ return obj
113
+ else
114
+ case data_type
115
+ when CA_UINT8
116
+ type = :cv8u
117
+ when CA_INT8
118
+ type = :cv8s
119
+ when CA_UINT16
120
+ type = :cv16u
121
+ when CA_INT16
122
+ type = :cv16s
123
+ when CA_INT32
124
+ type = :cv32s
125
+ when CA_FLOAT32
126
+ type = :cv32f
127
+ when CA_FLOAT64
128
+ type = :cv64f
129
+ else
130
+ raise "invalid CArray type"
131
+ end
132
+ case self.rank
133
+ when 2
134
+ obj = OpenCV::IplImage.new(self.dim1, self.dim0, type, 1)
135
+ when 3
136
+ obj = OpenCV::IplImage.new(self.dim0, self.dim1, type, self.dim2)
137
+ else
138
+ raise "invalid CArray rank"
139
+ end
140
+ obj.ca[] = self.transposed
141
+ return obj
142
+ end
143
+ end
144
+
145
+ end
146
+
147
+
148
+ __END__
149
+ win = GUI::Window.new("test")
150
+
151
+ img = CvMat.load("hibari.png")
152
+ ca = img.to_ca
153
+ ca[100..150,100..150,nil] = 255
154
+ img.fill!(255)
155
+ img.from_ca(ca)
156
+ win.show img
157
+
158
+ STDIN.gets
data/test/test.rb ADDED
@@ -0,0 +1,30 @@
1
+ require "opencv"
2
+ require "carray"
3
+ require "carray/graphics/opencv"
4
+
5
+ include OpenCV
6
+
7
+ win = GUI::Window.new("")
8
+ img = CvMat.new(640,480)
9
+ #img = IplImage.new(640,480)
10
+
11
+
12
+ ca = img.ca
13
+
14
+
15
+ loop do
16
+ ca.fill(0)
17
+ ca[nil,[100..150,5],2] = 255
18
+ ca[[100..150,5],nil,0] = 255
19
+
20
+ win.show img
21
+ GUI.wait_key(1000)
22
+
23
+ ca[] = 255
24
+ ca[nil,[100..150,5],2] = 0
25
+ ca[[100..150,5],nil,0] = 0
26
+ win.show img.image
27
+
28
+ GUI.wait_key(1000)
29
+ end
30
+
metadata ADDED
@@ -0,0 +1,52 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: carray-opencv
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Hiroki Motoyoshi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-05-06 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |2
14
+ Extension for converting OpenCV::IplImage to/from CArray
15
+ email: ''
16
+ executables: []
17
+ extensions:
18
+ - extconf.rb
19
+ extra_rdoc_files: []
20
+ files:
21
+ - README.md
22
+ - carray-opencv.gemspec
23
+ - carray_opencv.c
24
+ - extconf.rb
25
+ - lib/carray-opencv.rb
26
+ - lib/graphics/opencv.rb
27
+ - test/test.rb
28
+ homepage: https://github.com/himotoyoshi/carray-opencv
29
+ licenses: []
30
+ metadata: {}
31
+ post_install_message:
32
+ rdoc_options: []
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 1.8.1
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubyforge_project:
47
+ rubygems_version: 2.6.4
48
+ signing_key:
49
+ specification_version: 4
50
+ summary: Extension for converting OpenCV::IplImage to/from CArray
51
+ test_files: []
52
+ has_rdoc: false