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 +7 -0
- data/README.md +0 -0
- data/carray-opencv.gemspec +23 -0
- data/carray_opencv.c +123 -0
- data/extconf.rb +8 -0
- data/lib/carray-opencv.rb +3 -0
- data/lib/graphics/opencv.rb +158 -0
- data/test/test.rb +30 -0
- metadata +52 -0
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,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
|