mirror of
https://github.com/ruby-opencv/ruby-opencv
synced 2023-03-27 23:22:12 -04:00
Ruby 1.9.x fixes
This commit is contained in:
parent
7f823c4ff0
commit
0e46c20929
9 changed files with 70 additions and 45 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,6 +1,7 @@
|
||||||
.DS_Store
|
.DS_Store
|
||||||
examples/data
|
examples/data
|
||||||
*.o
|
*.o
|
||||||
|
*.so
|
||||||
Makefile
|
Makefile
|
||||||
mkmf.log
|
mkmf.log
|
||||||
opencv.bundle
|
opencv.bundle
|
|
@ -33,7 +33,7 @@ This also contains the data for the default cascades.
|
||||||
|
|
||||||
You can install by cloning this repository:
|
You can install by cloning this repository:
|
||||||
|
|
||||||
git clone git://github.com/jeffrafter/ruby-opencv.git
|
git clone git://github.com/ser1zw/ruby-opencv.git
|
||||||
|
|
||||||
Then inside the ruby-opencv folder run:
|
Then inside the ruby-opencv folder run:
|
||||||
|
|
||||||
|
@ -45,8 +45,6 @@ Then inside the ruby-opencv folder run:
|
||||||
|
|
||||||
Once installed it is possible to show images via GUI Window.
|
Once installed it is possible to show images via GUI Window.
|
||||||
|
|
||||||
require "rubygems"
|
|
||||||
gem "opencv"
|
|
||||||
require "opencv"
|
require "opencv"
|
||||||
|
|
||||||
image = OpenCV::IplImage.load("sample.jpg")
|
image = OpenCV::IplImage.load("sample.jpg")
|
||||||
|
@ -63,7 +61,6 @@ In order for this to work you must copy the OpenCV haarcascades data into a
|
||||||
subfolder called data.
|
subfolder called data.
|
||||||
|
|
||||||
#!/usr/bin/env ruby
|
#!/usr/bin/env ruby
|
||||||
require "rubygems"
|
|
||||||
require "opencv"
|
require "opencv"
|
||||||
|
|
||||||
if ARGV.length < 2
|
if ARGV.length < 2
|
||||||
|
@ -82,7 +79,7 @@ subfolder called data.
|
||||||
|
|
||||||
== REQUIREMENTS:
|
== REQUIREMENTS:
|
||||||
|
|
||||||
* OpenCV 2.0 or later.
|
* OpenCV 2.0 or 2.1
|
||||||
http://opencv.willowgarage.com/wiki/
|
http://opencv.willowgarage.com/wiki/
|
||||||
* ffcall (optional)
|
* ffcall (optional)
|
||||||
http://www.haible.de/bruno/packages-ffcall.html
|
http://www.haible.de/bruno/packages-ffcall.html
|
||||||
|
|
|
@ -437,7 +437,7 @@ rb_method_missing(int argc, VALUE *argv, VALUE self)
|
||||||
const char *to_str = "\\Ato_(\\w+)";
|
const char *to_str = "\\Ato_(\\w+)";
|
||||||
VALUE name, args, str[3], method;
|
VALUE name, args, str[3], method;
|
||||||
rb_scan_args(argc, argv, "1*", &name, &args);
|
rb_scan_args(argc, argv, "1*", &name, &args);
|
||||||
if (RARRAY(args)->len != 0)
|
if (RARRAY_LEN(args) != 0)
|
||||||
return rb_call_super(argc, argv);
|
return rb_call_super(argc, argv);
|
||||||
if(rb_reg_match(rb_reg_new(to_str, strlen(to_str), 0), rb_funcall(name, rb_intern("to_s"), 0)) == Qnil)
|
if(rb_reg_match(rb_reg_new(to_str, strlen(to_str), 0), rb_funcall(name, rb_intern("to_s"), 0)) == Qnil)
|
||||||
return rb_call_super(argc, argv);
|
return rb_call_super(argc, argv);
|
||||||
|
@ -452,7 +452,7 @@ rb_method_missing(int argc, VALUE *argv, VALUE self)
|
||||||
VALUE name, args, method;
|
VALUE name, args, method;
|
||||||
rb_scan_args(argc, argv, "1*", &name, &args);
|
rb_scan_args(argc, argv, "1*", &name, &args);
|
||||||
method = rb_funcall(name, rb_intern("to_s"), 0);
|
method = rb_funcall(name, rb_intern("to_s"), 0);
|
||||||
if (RARRAY(args)->len != 0 || !rb_respond_to(rb_module_opencv(), rb_intern(StringValuePtr(method))))
|
if (RARRAY_LEN(args) != 0 || !rb_respond_to(rb_module_opencv(), rb_intern(StringValuePtr(method))))
|
||||||
return rb_call_super(argc, argv);
|
return rb_call_super(argc, argv);
|
||||||
return rb_funcall(rb_module_opencv(), rb_intern(StringValuePtr(method)), 1, self);
|
return rb_funcall(rb_module_opencv(), rb_intern(StringValuePtr(method)), 1, self);
|
||||||
}
|
}
|
||||||
|
@ -886,26 +886,26 @@ rb_sub_rect(VALUE self, VALUE args)
|
||||||
CvRect area;
|
CvRect area;
|
||||||
CvPoint topleft;
|
CvPoint topleft;
|
||||||
CvSize size;
|
CvSize size;
|
||||||
switch(RARRAY(args)->len) {
|
switch(RARRAY_LEN(args)) {
|
||||||
case 1:
|
case 1:
|
||||||
area = VALUE_TO_CVRECT(RARRAY(args)->ptr[0]);
|
area = VALUE_TO_CVRECT(RARRAY_PTR(args)[0]);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
topleft = VALUE_TO_CVPOINT(RARRAY(args)->ptr[0]);
|
topleft = VALUE_TO_CVPOINT(RARRAY_PTR(args)[0]);
|
||||||
size = VALUE_TO_CVSIZE(RARRAY(args)->ptr[1]);
|
size = VALUE_TO_CVSIZE(RARRAY_PTR(args)[1]);
|
||||||
area.x = topleft.x;
|
area.x = topleft.x;
|
||||||
area.y = topleft.y;
|
area.y = topleft.y;
|
||||||
area.width = size.width;
|
area.width = size.width;
|
||||||
area.height = size.height;
|
area.height = size.height;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
area.x = NUM2INT(RARRAY(args)->ptr[0]);
|
area.x = NUM2INT(RARRAY_PTR(args)[0]);
|
||||||
area.y = NUM2INT(RARRAY(args)->ptr[1]);
|
area.y = NUM2INT(RARRAY_PTR(args)[1]);
|
||||||
area.width = NUM2INT(RARRAY(args)->ptr[2]);
|
area.width = NUM2INT(RARRAY_PTR(args)[2]);
|
||||||
area.height = NUM2INT(RARRAY(args)->ptr[3]);
|
area.height = NUM2INT(RARRAY_PTR(args)[3]);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
rb_raise(rb_eArgError, "wrong number of arguments (%d of 1 or 2 or 4)", RARRAY(args)->len);
|
rb_raise(rb_eArgError, "wrong number of arguments (%d of 1 or 2 or 4)", RARRAY_LEN(args));
|
||||||
}
|
}
|
||||||
return DEPEND_OBJECT(rb_klass,
|
return DEPEND_OBJECT(rb_klass,
|
||||||
cvGetSubRect(CVARR(self), CVALLOC(CvMat), area),
|
cvGetSubRect(CVARR(self), CVALLOC(CvMat), area),
|
||||||
|
@ -978,7 +978,7 @@ rb_slice_height(VALUE self, VALUE num)
|
||||||
VALUE
|
VALUE
|
||||||
rb_row(VALUE self, VALUE args)
|
rb_row(VALUE self, VALUE args)
|
||||||
{
|
{
|
||||||
int len = RARRAY(args)->len;
|
int len = RARRAY_LEN(args);
|
||||||
if (len < 1) {rb_raise(rb_eArgError, "wrong number of argument.(more than 1)");}
|
if (len < 1) {rb_raise(rb_eArgError, "wrong number of argument.(more than 1)");}
|
||||||
VALUE ary = rb_ary_new2(len);
|
VALUE ary = rb_ary_new2(len);
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
|
@ -990,7 +990,7 @@ rb_row(VALUE self, VALUE args)
|
||||||
rb_ary_store(ary, i, DEPEND_OBJECT(rb_klass, cvGetRows(CVARR(self), CVALLOC(CvMat), slice.start_index, slice.end_index), self));
|
rb_ary_store(ary, i, DEPEND_OBJECT(rb_klass, cvGetRows(CVARR(self), CVALLOC(CvMat), slice.start_index, slice.end_index), self));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return RARRAY(ary)->len > 1 ? ary : rb_ary_entry(ary, 0);
|
return RARRAY_LEN(ary) > 1 ? ary : rb_ary_entry(ary, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1004,7 +1004,7 @@ rb_row(VALUE self, VALUE args)
|
||||||
VALUE
|
VALUE
|
||||||
rb_col(VALUE self, VALUE args)
|
rb_col(VALUE self, VALUE args)
|
||||||
{
|
{
|
||||||
int len = RARRAY(args)->len;
|
int len = RARRAY_LEN(args);
|
||||||
if (len < 1) {rb_raise(rb_eArgError, "wrong number of argument.(more than 1)");}
|
if (len < 1) {rb_raise(rb_eArgError, "wrong number of argument.(more than 1)");}
|
||||||
VALUE ary = rb_ary_new2(len);
|
VALUE ary = rb_ary_new2(len);
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
|
@ -1016,7 +1016,7 @@ rb_col(VALUE self, VALUE args)
|
||||||
rb_ary_store(ary, i, DEPEND_OBJECT(rb_klass, cvGetCols(CVARR(self), CVALLOC(CvMat), slice.start_index, slice.end_index), self));
|
rb_ary_store(ary, i, DEPEND_OBJECT(rb_klass, cvGetCols(CVARR(self), CVALLOC(CvMat), slice.start_index, slice.end_index), self));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return RARRAY(ary)->len > 1 ? ary : rb_ary_entry(ary, 0);
|
return RARRAY_LEN(ary) > 1 ? ary : rb_ary_entry(ary, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1134,11 +1134,11 @@ VALUE
|
||||||
rb_aref(VALUE self, VALUE args)
|
rb_aref(VALUE self, VALUE args)
|
||||||
{
|
{
|
||||||
int index[CV_MAX_DIM];
|
int index[CV_MAX_DIM];
|
||||||
for (int i = 0; i < RARRAY(args)->len; i++) {
|
for (int i = 0; i < RARRAY_LEN(args); i++) {
|
||||||
index[i] = NUM2INT(rb_ary_entry(args, i));
|
index[i] = NUM2INT(rb_ary_entry(args, i));
|
||||||
}
|
}
|
||||||
CvScalar scalar = cvScalarAll(0);
|
CvScalar scalar = cvScalarAll(0);
|
||||||
switch(RARRAY(args)->len) {
|
switch(RARRAY_LEN(args)) {
|
||||||
case 1:
|
case 1:
|
||||||
scalar = cvGet1D(CVARR(self), index[0]);
|
scalar = cvGet1D(CVARR(self), index[0]);
|
||||||
break;
|
break;
|
||||||
|
@ -1166,10 +1166,10 @@ rb_aset(VALUE self, VALUE args)
|
||||||
{
|
{
|
||||||
CvScalar scalar = VALUE_TO_CVSCALAR(rb_ary_pop(args));
|
CvScalar scalar = VALUE_TO_CVSCALAR(rb_ary_pop(args));
|
||||||
int index[CV_MAX_DIM];
|
int index[CV_MAX_DIM];
|
||||||
for (int i = 0; i < RARRAY(args)->len; i++) {
|
for (int i = 0; i < RARRAY_LEN(args); i++) {
|
||||||
index[i] = NUM2INT(rb_ary_entry(args, i));
|
index[i] = NUM2INT(rb_ary_entry(args, i));
|
||||||
}
|
}
|
||||||
switch(RARRAY(args)->len) {
|
switch(RARRAY_LEN(args)) {
|
||||||
case 1:
|
case 1:
|
||||||
cvSet1D(CVARR(self), index[0], scalar);
|
cvSet1D(CVARR(self), index[0], scalar);
|
||||||
break;
|
break;
|
||||||
|
@ -1466,7 +1466,7 @@ VALUE
|
||||||
rb_merge(VALUE klass, VALUE args)
|
rb_merge(VALUE klass, VALUE args)
|
||||||
{
|
{
|
||||||
VALUE object, dest;
|
VALUE object, dest;
|
||||||
int len = RARRAY(args)->len;
|
int len = RARRAY_LEN(args);
|
||||||
if (!(len > 0) || len > CV_CN_MAX) {
|
if (!(len > 0) || len > CV_CN_MAX) {
|
||||||
rb_raise(rb_eArgError, "wrong number of argument (%d for 1..4)", len);
|
rb_raise(rb_eArgError, "wrong number of argument (%d for 1..4)", len);
|
||||||
}
|
}
|
||||||
|
|
|
@ -343,8 +343,8 @@ rb_push(VALUE self, VALUE args)
|
||||||
CvSeq *seq = CVSEQ(self);
|
CvSeq *seq = CVSEQ(self);
|
||||||
VALUE klass = seqblock_class(seq), object;
|
VALUE klass = seqblock_class(seq), object;
|
||||||
void *buffer = 0;
|
void *buffer = 0;
|
||||||
for(int i = 0; i < RARRAY(args)->len; i++){
|
for(int i = 0; i < RARRAY_LEN(args); i++){
|
||||||
object = RARRAY(args)->ptr[i];
|
object = RARRAY_PTR(args)[i];
|
||||||
if(CLASS_OF(object) == klass){
|
if(CLASS_OF(object) == klass){
|
||||||
cvSeqPush(seq, DATA_PTR(object));
|
cvSeqPush(seq, DATA_PTR(object));
|
||||||
}else if(rb_obj_is_kind_of(object, rb_klass) && CLASS_OF(object) == klass){ // object is CvSeq
|
}else if(rb_obj_is_kind_of(object, rb_klass) && CLASS_OF(object) == klass){ // object is CvSeq
|
||||||
|
@ -403,8 +403,8 @@ rb_unshift(VALUE self, VALUE args)
|
||||||
CvSeq *seq = CVSEQ(self);
|
CvSeq *seq = CVSEQ(self);
|
||||||
VALUE klass = seqblock_class(seq), object;
|
VALUE klass = seqblock_class(seq), object;
|
||||||
void *buffer = 0;
|
void *buffer = 0;
|
||||||
for(int i = 0; i < RARRAY(args)->len; i++){
|
for(int i = 0; i < RARRAY_LEN(args); i++){
|
||||||
object = RARRAY(args)->ptr[i];
|
object = RARRAY_PTR(args)[i];
|
||||||
if(CLASS_OF(object) == klass){
|
if(CLASS_OF(object) == klass){
|
||||||
cvSeqPushFront(seq, DATA_PTR(object));
|
cvSeqPushFront(seq, DATA_PTR(object));
|
||||||
}else if(rb_obj_is_kind_of(object, rb_klass) && CLASS_OF(object) == klass){
|
}else if(rb_obj_is_kind_of(object, rb_klass) && CLASS_OF(object) == klass){
|
||||||
|
|
|
@ -57,7 +57,7 @@ VALUE_TO_CVTERMCRITERIA(VALUE object)
|
||||||
case T_FLOAT:
|
case T_FLOAT:
|
||||||
return cvTermCriteria(CV_TERMCRIT_EPS, 0, NUM2DBL(object));
|
return cvTermCriteria(CV_TERMCRIT_EPS, 0, NUM2DBL(object));
|
||||||
case T_ARRAY:
|
case T_ARRAY:
|
||||||
if (RARRAY(object)->len == 2) {
|
if (RARRAY_LEN(object) == 2) {
|
||||||
return cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,
|
return cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,
|
||||||
NUM2INT(rb_ary_entry(object, 0)),
|
NUM2INT(rb_ary_entry(object, 0)),
|
||||||
NUM2DBL(rb_ary_entry(object, 1)));
|
NUM2DBL(rb_ary_entry(object, 1)));
|
||||||
|
|
|
@ -60,17 +60,17 @@ rb_initialize(int argc, VALUE *argv, VALUE self)
|
||||||
char codec[4] = {' ', ' ', ' ', ' '};
|
char codec[4] = {' ', ' ', ' ', ' '};
|
||||||
int codec_number;
|
int codec_number;
|
||||||
Check_Type(filename, T_STRING);
|
Check_Type(filename, T_STRING);
|
||||||
if (RSTRING(filename)->len == 0)
|
if (RSTRING_LEN(filename) == 0)
|
||||||
rb_raise(rb_eArgError, "argument 1 (file name) dose not given");
|
rb_raise(rb_eArgError, "argument 1 (file name) dose not given");
|
||||||
if (NIL_P(fourcc))
|
if (NIL_P(fourcc))
|
||||||
codec_number = -1;
|
codec_number = -1;
|
||||||
else {
|
else {
|
||||||
Check_Type(fourcc, T_STRING);
|
Check_Type(fourcc, T_STRING);
|
||||||
if (RSTRING(fourcc)->len > 4)
|
if (RSTRING_LEN(fourcc) > 4)
|
||||||
rb_raise(rb_eStandardError, "argument 2 (fourcc) should be specific 4-character. (i.e \"PIM1\",\"MJPG\")");
|
rb_raise(rb_eStandardError, "argument 2 (fourcc) should be specific 4-character. (i.e \"PIM1\",\"MJPG\")");
|
||||||
else {
|
else {
|
||||||
for (int i = 0; i < RSTRING(fourcc)->len; i++)
|
for (int i = 0; i < RSTRING_LEN(fourcc); i++)
|
||||||
codec[i] = RSTRING(fourcc)->ptr[i];
|
codec[i] = RSTRING_PTR(fourcc)[i];
|
||||||
codec_number = CV_FOURCC(codec[0], codec[1], codec[2], codec[3]);
|
codec_number = CV_FOURCC(codec[0], codec[1], codec[2], codec[3]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
35
ext/opencv.h
35
ext/opencv.h
|
@ -15,7 +15,11 @@
|
||||||
|
|
||||||
/* include headers */
|
/* include headers */
|
||||||
#include <ruby.h>
|
#include <ruby.h>
|
||||||
|
#ifdef HAVE_RUBY_VERSION_H
|
||||||
|
#include <ruby/version.h>
|
||||||
|
#else
|
||||||
#include <version.h>
|
#include <version.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef RUBY_WIN32_H
|
#ifdef RUBY_WIN32_H
|
||||||
#ifdef write
|
#ifdef write
|
||||||
|
@ -28,7 +32,12 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern "C"{
|
extern "C"{
|
||||||
|
#ifdef HAVE_RUBY_ST_H
|
||||||
|
#include <ruby/st.h>
|
||||||
|
#else
|
||||||
#include <st.h>
|
#include <st.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_CALLBACK_H
|
#ifdef HAVE_CALLBACK_H
|
||||||
#include <callback.h> // callhack.h is ffcall header
|
#include <callback.h> // callhack.h is ffcall header
|
||||||
#endif
|
#endif
|
||||||
|
@ -126,6 +135,24 @@ extern "C"{
|
||||||
|
|
||||||
#define maxint(a,b) ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
|
#define maxint(a,b) ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
|
||||||
|
|
||||||
|
// wrapper for <= 1.8
|
||||||
|
#ifndef RARRAY_LEN
|
||||||
|
#define RARRAY_LEN(arg) (RARRAY(arg)->len)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef RARRAY_PTR
|
||||||
|
#define RARRAY_PTR(arg) (RARRAY(arg)->ptr)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef RSTRING_LEN
|
||||||
|
#define RSTRING_LEN(arg) (RSTRING(arg)->len)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef RSTRING_PTR
|
||||||
|
#define RSTRING_PTR(arg) (RSTRING(arg)->ptr)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// OpenCV module
|
// OpenCV module
|
||||||
__NAMESPACE_BEGIN_OPENCV
|
__NAMESPACE_BEGIN_OPENCV
|
||||||
|
|
||||||
|
@ -306,7 +333,7 @@ __NAMESPACE_END_OPENCV
|
||||||
inline VALUE
|
inline VALUE
|
||||||
extract_options_from_args_bang(VALUE ary)
|
extract_options_from_args_bang(VALUE ary)
|
||||||
{
|
{
|
||||||
return (RARRAY(ary)->len > 0 && rb_obj_is_kind_of(RARRAY(ary)->ptr[RARRAY(ary)->len -1], rb_cHash)) ? rb_ary_pop(ary) : rb_hash_new();
|
return (RARRAY_LEN(ary) > 0 && rb_obj_is_kind_of(RARRAY_PTR(ary)[RARRAY_LEN(ary) -1], rb_cHash)) ? rb_ary_pop(ary) : rb_hash_new();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -316,7 +343,7 @@ assert_valid_keys(VALUE keys, VALUE valid_keys)
|
||||||
VALUE unknown_keys = rb_funcall(keys, rb_intern("-"), 1, rb_funcall(valid_keys, rb_intern("flatten"), 0));
|
VALUE unknown_keys = rb_funcall(keys, rb_intern("-"), 1, rb_funcall(valid_keys, rb_intern("flatten"), 0));
|
||||||
if (NUM2INT(rb_funcall(unknown_keys, rb_intern("empty?"), 0)) != 0){
|
if (NUM2INT(rb_funcall(unknown_keys, rb_intern("empty?"), 0)) != 0){
|
||||||
rb_raise(rb_eArgError, "Unknown key(s): %s",
|
rb_raise(rb_eArgError, "Unknown key(s): %s",
|
||||||
RSTRING(rb_funcall(unknown_keys, rb_intern("join"), 1, rb_str_new2(", ")))->ptr);
|
RSTRING_PTR(rb_funcall(unknown_keys, rb_intern("join"), 1, rb_str_new2(", "))));
|
||||||
}
|
}
|
||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
|
@ -330,9 +357,9 @@ assert_valid_keys(VALUE options, int n, ...){
|
||||||
va_start(valid_keys, n);
|
va_start(valid_keys, n);
|
||||||
for (int i = 0; i < n; i++)
|
for (int i = 0; i < n; i++)
|
||||||
rb_ary_delete(unknown_keys, ID2SYM(rb_intern(va_arg(valid_keys, char*))));
|
rb_ary_delete(unknown_keys, ID2SYM(rb_intern(va_arg(valid_keys, char*))));
|
||||||
if (RARRAY(unknown_keys)->len > 0)
|
if (RARRAY_LEN(unknown_keys) > 0)
|
||||||
rb_raise(rb_eArgError, "Unknown key(s): %s",
|
rb_raise(rb_eArgError, "Unknown key(s): %s",
|
||||||
RSTRING(rb_funcall(unknown_keys, rb_intern("join"), 1, rb_str_new2(", ")))->ptr);
|
RSTRING_PTR(rb_funcall(unknown_keys, rb_intern("join"), 1, rb_str_new2(", "))));
|
||||||
va_end(valid_keys);
|
va_end(valid_keys);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -190,12 +190,12 @@ CVPOINTS_FROM_POINT_SET(VALUE object, CvPoint **pointset)
|
||||||
/* to do */
|
/* to do */
|
||||||
rb_raise(rb_eNotImpError, "CvMat to CvSeq conversion not implemented.");
|
rb_raise(rb_eNotImpError, "CvMat to CvSeq conversion not implemented.");
|
||||||
}else if(rb_obj_is_kind_of(object, rb_cArray)){
|
}else if(rb_obj_is_kind_of(object, rb_cArray)){
|
||||||
*pointset = (CvPoint*)cvAlloc(RARRAY(object)->len * sizeof(CvPoint));
|
*pointset = (CvPoint*)cvAlloc(RARRAY_LEN(object) * sizeof(CvPoint));
|
||||||
for(int i = 0; i < RARRAY(object)->len; i++){
|
for(int i = 0; i < RARRAY_LEN(object); i++){
|
||||||
(*pointset)[i].x = NUM2INT(rb_funcall(rb_ary_entry(object, i), rb_intern("x"), 0));
|
(*pointset)[i].x = NUM2INT(rb_funcall(rb_ary_entry(object, i), rb_intern("x"), 0));
|
||||||
(*pointset)[i].y = NUM2INT(rb_funcall(rb_ary_entry(object, i), rb_intern("y"), 0));
|
(*pointset)[i].y = NUM2INT(rb_funcall(rb_ary_entry(object, i), rb_intern("y"), 0));
|
||||||
}
|
}
|
||||||
return RARRAY(object)->len;
|
return RARRAY_LEN(object);
|
||||||
}else{
|
}else{
|
||||||
rb_raise(rb_eTypeError, "Can't convert CvSeq(PointSet).");
|
rb_raise(rb_eTypeError, "Can't convert CvSeq(PointSet).");
|
||||||
}
|
}
|
||||||
|
@ -220,10 +220,10 @@ VALUE_TO_POINT_SET(VALUE object)
|
||||||
rb_raise(rb_eNotImpError, "CvMat to CvSeq conversion not implemented.");
|
rb_raise(rb_eNotImpError, "CvMat to CvSeq conversion not implemented.");
|
||||||
}else if(rb_obj_is_kind_of(object, rb_cArray)){
|
}else if(rb_obj_is_kind_of(object, rb_cArray)){
|
||||||
//pointset = cCvSeq::new_sequence(cCvSeq::rb_class(), )
|
//pointset = cCvSeq::new_sequence(cCvSeq::rb_class(), )
|
||||||
length = RARRAY(object)->len;
|
length = RARRAY_LEN(object);
|
||||||
storage = cCvMemStorage::new_object();
|
storage = cCvMemStorage::new_object();
|
||||||
seq = cvCreateSeq(CV_SEQ_POINT_SET, sizeof(CvSeq), sizeof(CvPoint), CVMEMSTORAGE(storage));
|
seq = cvCreateSeq(CV_SEQ_POINT_SET, sizeof(CvSeq), sizeof(CvPoint), CVMEMSTORAGE(storage));
|
||||||
for(int i = 0; i < RARRAY(object)->len; i++){
|
for(int i = 0; i < RARRAY_LEN(object); i++){
|
||||||
p32.x = NUM2DBL(rb_funcall(rb_ary_entry(object, i), rb_intern("x"), 0));
|
p32.x = NUM2DBL(rb_funcall(rb_ary_entry(object, i), rb_intern("x"), 0));
|
||||||
p32.y = NUM2DBL(rb_funcall(rb_ary_entry(object, i), rb_intern("y"), 0));
|
p32.y = NUM2DBL(rb_funcall(rb_ary_entry(object, i), rb_intern("y"), 0));
|
||||||
cvSeqPush(seq, &p32);
|
cvSeqPush(seq, &p32);
|
||||||
|
|
|
@ -76,7 +76,7 @@ VALUE rb_initialize(int argc, VALUE *argv, VALUE self){
|
||||||
if(NIL_P(block)){rb_raise(rb_eArgError, "block not given.");}
|
if(NIL_P(block)){rb_raise(rb_eArgError, "block not given.");}
|
||||||
Check_Type(name, T_STRING);
|
Check_Type(name, T_STRING);
|
||||||
Trackbar *trackbar = TRACKBAR(self);
|
Trackbar *trackbar = TRACKBAR(self);
|
||||||
trackbar->name = strcpy(ALLOC_N(char, RSTRING(name)->len), StringValueCStr(name));
|
trackbar->name = strcpy(ALLOC_N(char, RSTRING_LEN(name)), StringValueCStr(name));
|
||||||
trackbar->maxval = NUM2INT(maxval);
|
trackbar->maxval = NUM2INT(maxval);
|
||||||
trackbar->val = IF_INT(val, 0);
|
trackbar->val = IF_INT(val, 0);
|
||||||
trackbar->block = block;
|
trackbar->block = block;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue