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:
parent
0ebc5b70f9
commit
6207e00143
5 changed files with 88 additions and 4 deletions
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 []
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue