carray-opencv 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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