1
0
Fork 0
mirror of https://github.com/ruby-opencv/ruby-opencv synced 2023-03-27 23:22:12 -04:00
ruby-opencv/lib/opencv/cvmat.rb
2016-04-03 07:47:06 +09:00

95 lines
2.8 KiB
Ruby

module Cv
class CvMat < Mat
@@depth_table = {
cv8u: CV_8U,
cv8s: CV_8S,
cv16u: CV_16U,
cv16s: CV_16S,
cv32s: CV_32S,
cv32f: CV_32F,
cv64f: CV_64F
}
@@depth_table2 = @@depth_table.invert
def initialize(rows, cols, depth = CV_8U, channels = 3)
depth = @@depth_table[depth] if depth.is_a? Symbol
type = OpenCV::CV_MAKETYPE(depth, channels)
super(rows, cols, type)
end
def depth
@@depth_table2[super]
end
def channel
self.channels
end
def save_image(filename, params = {})
raise TypeError unless params.is_a? Hash
save(filename, params.to_a.flatten)
end
def line(p1, p2, options = {})
color = options[:color] || Scalar.new
super(p1, p2, color, options)
end
def line!(p1, p2, options = {})
color = options[:color] || Scalar.new
super(p1, p2, color, options)
end
def self.load(filename, iscolor = 1)
CvMat::imread_as(filename, iscolor, CvMat)
end
def encode(ext, options = {})
raise TypeError unless options.is_a? Hash
imencode(ext, options.to_a.flatten)
end
def self.decode(buf, iscolor = 1)
Mat::imdecode_as(buf, iscolor, CvMat)
end
def sobel(dx, dy, aperture_size = 3)
depth = (self.depth == :cv8u) ? CV_16S : CV_32F
super(depth, dx, dy, aperture_size)
end
def laplace(aperture_size = 3)
depth = (self.depth == :cv8u) ? CV_16S : CV_32F
laplacian(depth, aperture_size)
end
def convert_scale_abs(option = {})
alpha = option[:scale] || 1.0
beta = option[:shift] || 0
super(alpha, beta)
end
def self.add_weighted(src1, alpha, src2, beta, gamma)
OpenCV::add_weighted(src1, alpha, src2, beta, gamma)
end
# cv::cvtColor
[:BGR2BGRA, :RGB2RGBA, :BGRA2BGR, :RGBA2RGB, :BGR2RGBA, :RGB2BGRA,
:RGBA2BGR, :BGRA2RGB, :BGR2RGB, :RGB2BGR, :BGRA2RGBA, :RGBA2BGRA,
:BGR2GRAY, :RGB2GRAY, :GRAY2BGR, :GRAY2RGB, :GRAY2BGRA, :GRAY2RGBA,
:BGRA2GRAY, :RGBA2GRAY, :BGR2BGR565, :RGB2BGR565, :BGR5652BGR,
:BGR5652RGB, :BGRA2BGR565, :RGBA2BGR565, :BGR5652BGRA, :BGR5652RGBA,
:GRAY2BGR565, :BGR5652GRAY, :BGR2BGR555, :RGB2BGR555, :BGR5552BGR,
:BGR5552RGB, :BGRA2BGR555, :RGBA2BGR555, :BGR5552BGRA, :BGR5552RGBA,
:GRAY2BGR555, :BGR5552GRAY, :BGR2XYZ, :RGB2XYZ, :XYZ2BGR, :XYZ2RGB,
:BGR2YCrCb, :RGB2YCrCb, :YCrCb2BGR, :YCrCb2RGB, :BGR2HSV, :RGB2HSV,
:BGR2Lab, :RGB2Lab, :BayerBG2BGR, :BayerGB2BGR, :BayerRG2BGR, :BayerGR2BGR,
:BayerBG2RGB, :BayerGB2RGB, :BayerRG2RGB, :BayerGR2RGB, :BGR2Luv, :RGB2Luv,
:BGR2HLS, :RGB2HLS, :HSV2BGR, :HSV2RGB, :Lab2BGR, :Lab2RGB, :Luv2BGR, :Luv2RGB,
:HLS2BGR, :HLS2RGB].each do |method_name|
define_method method_name do
cvt_color(eval("COLOR_#{method_name}"), 0)
end
end
end
end