1
0
Fork 0
mirror of https://github.com/ruby-opencv/ruby-opencv synced 2023-03-27 23:22:12 -04:00

implemented CvMat.load

This commit is contained in:
ser1zw 2011-01-15 20:15:49 +09:00
parent 0ebc5b70f9
commit 6207e00143
5 changed files with 88 additions and 4 deletions

View file

@ -155,6 +155,7 @@ void define_ruby_class()
rb_hash_aset(find_fundamental_matrix_option, ID2SYM(rb_intern("desirable_level")), rb_float_new(0.99));
rb_define_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
rb_define_singleton_method(rb_klass, "load", RUBY_METHOD_FUNC(rb_load_imageM), -1);
// Ruby/OpenCV original functions
rb_define_method(rb_klass, "method_missing", RUBY_METHOD_FUNC(rb_method_missing), -1);
rb_define_method(rb_klass, "to_s", RUBY_METHOD_FUNC(rb_to_s), 0);
@ -428,6 +429,46 @@ rb_initialize(int argc, VALUE *argv, VALUE self)
return self;
}
/*
* call-seq:
* CvMat::load(<i>filename[,iscolor = CV_LOAD_IMAGE_COLOR]</i>)
*
* Load an image from file.
* iscolor = CV_LOAD_IMAGE_COLOR, the loaded image is forced to be a 3-channel color image
* iscolor = CV_LOAD_IMAGE_GRAYSCALE, the loaded image is forced to be grayscale
* iscolor = CV_LOAD_IMAGE_UNCHANGED, the loaded image will be loaded as is.
* Currently the following file format are supported.
* * Windows bitmaps - BMP,DIB
* * JPEG files - JPEG,JPG,JPE
* * Portable Network Graphics - PNG
* * Portable image format - PBM,PGM,PPM
* * Sun rasters - SR,RAS
* * TIFF files - TIFF,TIF
*/
VALUE
rb_load_imageM(int argc, VALUE *argv, VALUE self)
{
VALUE filename, iscolor;
rb_scan_args(argc, argv, "11", &filename, &iscolor);
Check_Type(filename, T_STRING);
int _iscolor;
if (TYPE(iscolor) == T_NIL) {
_iscolor = CV_LOAD_IMAGE_COLOR;
}
else {
Check_Type(iscolor, T_FIXNUM);
_iscolor = FIX2INT(iscolor);
}
CvMat *mat;
if ((mat = cvLoadImageM(StringValueCStr(filename), _iscolor)) == NULL) {
rb_raise(rb_eStandardError, "file does not exist or invalid format image.");
}
return OPENCV_OBJECT(rb_klass, mat);
}
/*
* nodoc
*/

View file

@ -24,6 +24,7 @@ void define_ruby_class();
VALUE rb_allocate(VALUE klass);
VALUE rb_initialize(int argc, VALUE *argv, VALUE self);
VALUE rb_load_imageM(int argc, VALUE *argv, VALUE self);
VALUE rb_method_missing(int argc, VALUE *argv, VALUE self);
VALUE rb_to_s(VALUE self);

View file

@ -6,6 +6,8 @@ require 'opencv'
include OpenCV
class OpenCVTestCase < Test::Unit::TestCase
FILENAME_CAT = File.expand_path(File.dirname(__FILE__)) + '/samples/cat.jpg'
CvMat.class_eval do
# Range check for debug
alias original_aref []

View file

@ -39,6 +39,45 @@ class TestCvMat < OpenCVTestCase
}
end
def test_load
mat = CvMat.load(FILENAME_CAT)
assert_equal(CvMat, mat.class)
assert_equal(375, mat.cols)
assert_equal(500, mat.rows)
assert_equal(:cv8u, mat.depth)
assert_equal(3, mat.channel)
assert_equal('ebc0b85d3ac44ea60181c997f35d13df', hash_img(mat))
mat = CvMat.load(FILENAME_CAT, CV_LOAD_IMAGE_GRAYSCALE)
assert_equal(CvMat, mat.class)
assert_equal(375, mat.cols)
assert_equal(500, mat.rows)
assert_equal(:cv8u, mat.depth)
assert_equal(1, mat.channel)
assert_equal('f0ae1d7f2d6b3a64d093e3181361f3a4', hash_img(mat))
mat = CvMat.load(FILENAME_CAT, CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR)
assert_equal(CvMat, mat.class)
assert_equal(375, mat.cols)
assert_equal(500, mat.rows)
assert_equal(:cv8u, mat.depth)
assert_equal(3, mat.channel)
assert_equal('ebc0b85d3ac44ea60181c997f35d13df', hash_img(mat))
assert_raise(ArgumentError) {
CvMat.load
}
assert_raise(TypeError) {
CvMat.load(123)
}
assert_raise(TypeError) {
CvMat.load(FILENAME_CAT, 'foobar')
}
assert_raise(StandardError) {
CvMat.load('file/does/not/exist')
}
end
def test_GOOD_FEATURES_TO_TRACK_OPTION
assert_equal(0xff, CvMat::GOOD_FEATURES_TO_TRACK_OPTION[:max])
assert_nil(CvMat::GOOD_FEATURES_TO_TRACK_OPTION[:mask])
@ -1742,8 +1781,8 @@ class TestCvMat < OpenCVTestCase
def test_solve
elems1 = [3, 4, 5,
8, 9, 6,
3, 5, 9]
8, 9, 6,
3, 5, 9]
elems2 = [3,
4,
5]

View file

@ -8,8 +8,6 @@ include OpenCV
# Tests for OpenCV::IplImage
class TestIplImage < OpenCVTestCase
FILENAME_CAT = File.expand_path(File.dirname(__FILE__)) + '/samples/cat.jpg'
def test_initialize
img = IplImage.new(10, 20)
assert_equal(10, img.width)
@ -26,6 +24,7 @@ class TestIplImage < OpenCVTestCase
def test_load
img = IplImage.load(FILENAME_CAT)
assert_equal(IplImage, img.class)
assert_equal(375, img.width)
assert_equal(500, img.height)
assert_equal(:cv8u, img.depth)
@ -33,6 +32,7 @@ class TestIplImage < OpenCVTestCase
assert_equal('f2e4dc5d6d3fc285203762ff53d150c7', hash_img(img))
img = IplImage.load(FILENAME_CAT, CV_LOAD_IMAGE_GRAYSCALE)
assert_equal(IplImage, img.class)
assert_equal(375, img.width)
assert_equal(500, img.height)
assert_equal(:cv8u, img.depth)
@ -43,6 +43,7 @@ class TestIplImage < OpenCVTestCase
assert_equal('b1a0c1c5504961b62e15fa7d57a2e7e0', hash_img(img))
img = IplImage.load(FILENAME_CAT, CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR)
assert_equal(IplImage, img.class)
assert_equal(375, img.width)
assert_equal(500, img.height)
assert_equal(:cv8u, img.depth)