通过使用+ -号进行计算
mod examples;
use opencv::core::{MatExprResult};
use opencv::highgui::{
//显示窗口
imshow,
//创建命名窗口
named_window,
//摧毁所有窗口
destroy_all_windows,
//等待用户输入
wait_key
};
use opencv::imgcodecs::imread;
use opencv::prelude::{MatTraitConst, MatExprTraitConst};
use opencv::core::{Mat,Scalar};
fn main() {
//创建窗体 window
let _ = named_window("window", opencv::highgui::WINDOW_NORMAL);
//读取图片
let src1 = imread("2.png", opencv::imgcodecs::IMREAD_ANYCOLOR).unwrap();
let scale = Scalar::new(40., 40., 40., 40.);
let src2 = Mat::new_rows_cols_with_default(src1.rows(), src1.cols(), opencv::core::CV_8UC3, scale).unwrap();
println!("ch1 = {}",src1.channels());
println!("ch2 = {}",src2.channels());
let des = &src1 + src2;
match des {
MatExprResult::Ok(mat) => {
let m = mat.to_mat().unwrap();
imshow("window2", &m).unwrap();
}
MatExprResult::Err(err) =>{
}
}
imshow("window1", &src1).unwrap();
let _ = wait_key(0);
let _ = destroy_all_windows();
}
使用add方法进行 加法计算
use opencv::core::add;
///加法
pub fn add(
src1: &dyn ToInputArray,
src2: &dyn ToInputArray,
dst: &mut dyn ToOutputArray,
mask: &dyn ToInputArray,
dtype: i32
) -> Result<()>
src1: first input array or a scalar.
src2: second input array or a scalar.
dst: output array that has the same size and number of channels as the input array(s); the depth is defined by dtype or src1/src2.
mask: optional operation mask - 8-bit single channel array, that specifies elements of the output array to be changed.
dtype: optional depth of the output array (see the discussion below).
default
mask: noArray()
dtype: -1
使用subtract方法进行减法计算
opencv::core::subtract
///减法
pub fn subtract(
src1: &dyn ToInputArray,
src2: &dyn ToInputArray,
dst: &mut dyn ToOutputArray,
mask: &dyn ToInputArray,
dtype: i32
) -> Result<()>
src1: first input array or a scalar.
src2: second input array or a scalar.
dst: output array of the same size and the same number of channels as the input array.
mask: optional operation mask; this is an 8-bit single channel array that specifies elements of the output array to be changed.
dtype: optional depth of the output array
default
mask: noArray()
dtype: -1
使用multiply进行乘法计算
use opencv::core::multiply;
///乘法
pub fn multiply(
src1: &dyn ToInputArray,
src2: &dyn ToInputArray,
dst: &mut dyn ToOutputArray,
scale: f64,
dtype: i32
) -> Result<()>
src1: first input array.
src2: second input array of the same size and the same type as src1.
dst: output array of the same size and type as src1.
scale: optional scale factor.
dtype: optional depth of the output array
default
scale: 1
dtype: -1
使用divide除法计算
use opencv::core::divide;
///除法
pub fn divide(
scale: f64,
src2: &dyn ToInputArray,
dst: &mut dyn ToOutputArray,
dtype: i32
) -> Result<()>
src1: first input array.
src2: second input array of the same size and type as src1.
scale: scalar factor.
dst: output array of the same size and type as src2.
dtype: optional depth of the output array; if -1, dst will have depth src2.depth(), but in case of an array-by-array division, you can only pass -1 when src1.depth()==src2.depth().
default
dtype: -1
\
加减乘除的代码演示
mod examples;
use opencv::core::{MatExprResult, ToInputArray, ToOutputArray};
use opencv::core::prelude::MatOpConst;
use opencv::core::{add,subtract,multiply,divide2};
use opencv::highgui::{
//显示窗口
imshow,
//创建命名窗口
named_window,
//摧毁所有窗口
destroy_all_windows,
//等待用户输入
wait_key
};
use opencv::imgcodecs::imread;
use opencv::prelude::{MatTraitConst, MatExprTraitConst};
use opencv::core::{Mat,Scalar};
fn main() {
//创建窗体 window
//let _ = named_window("window", opencv::highgui::WINDOW_NORMAL);
//读取图片
let src1 = imread("2.png", opencv::imgcodecs::IMREAD_ANYCOLOR).unwrap();
let scale = Scalar::new(40., 40.,40.,40.);
let src2 = Mat::new_rows_cols_with_default(src1.rows(), src1.cols(), opencv::core::CV_8UC3, scale).unwrap();
//加法
let mut out_add_image = Mat::default();
let _ = add(&src1.input_array().unwrap(), &src2.input_array().unwrap(), &mut out_add_image.output_array().unwrap(),&Mat::default().input_array().unwrap(), -1);
imshow("add", &out_add_image).unwrap();
//减法
let mut out_subtract_image = Mat::default();
let _ = subtract(&src1.input_array().unwrap(), &src2.input_array().unwrap(), &mut out_subtract_image.output_array().unwrap(),&Mat::default().input_array().unwrap(), -1);
imshow("subtract", &out_subtract_image).unwrap();
//乘法
let mut out_multiply_image = Mat::default();
let _ = multiply(&src1.input_array().unwrap(), &src2.input_array().unwrap(), &mut out_multiply_image.output_array().unwrap(), 1., -1);
imshow("multiply", &out_multiply_image).unwrap();
let mut out_divide_image = Mat::default();
let _ = divide2(&src1.input_array().unwrap(), &src2.input_array().unwrap(), &mut out_divide_image.output_array().unwrap(), 1.,-1);
imshow("divide", &out_divide_image).unwrap();
let _ = wait_key(0);
let _ = destroy_all_windows();
}
///显示图片
fn _show(){
//创建窗体 window
let _ = named_window("window", opencv::highgui::WINDOW_NORMAL);
//读取图片
let image = imread("2.png", opencv::imgcodecs::IMREAD_COLOR).unwrap();
//显示读取到的图片
imshow("window", &image).unwrap();
//等待用户输入,不然窗口就会立刻关闭
let _ = wait_key(0);
//销毁所有窗体
let _ = destroy_all_windows();
}
图像取反
use opencv::core::bitwise_not;
pub fn bitwise_not(
src: &dyn ToInputArray,
dst: &mut dyn ToOutputArray,
mask: &dyn ToInputArray
) -> Result<()>
src: input array.
dst: output array that has the same size and type as the input array.
mask: optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed
default
mask: noArray()
mod examples;
use opencv::core::{ ToInputArray, ToOutputArray, Vec3b, Vec3i};
use opencv::core::{add,bitwise_not};
use opencv::highgui::{
//显示窗口
imshow,
//创建命名窗口
named_window,
//摧毁所有窗口
destroy_all_windows,
//等待用户输入
wait_key
};
use opencv::imgcodecs::imread;
use opencv::prelude::{MatTraitConst, MatTrait};
use opencv::core::{Mat,Scalar};
fn main() {
//创建窗体 window
//let _ = named_window("window", opencv::highgui::WINDOW_NORMAL);
//读取图片
let src1 = imread("2.png", opencv::imgcodecs::IMREAD_ANYCOLOR).unwrap();
let scale = Scalar::new(0., 0.,0.,0.);
let mut src2 = Mat::new_rows_cols_with_default(src1.rows(), src1.cols(), opencv::core::CV_8UC1, scale).unwrap();
//只取一半
for row in 0..src2.rows(){
for col in 0..src2.cols()/2{
let mut mut_2d = src2.at_2d_mut::<u8>(row, col).unwrap();
*mut_2d = 255;
}
}
//图像取反
let mut out_add_image = Mat::default();
let _ = bitwise_not(&src1.input_array().unwrap(), &mut out_add_image.output_array().unwrap(),&src2.input_array().unwrap());
imshow("add", &out_add_image).unwrap();
let _ = wait_key(0);
let _ = destroy_all_windows();
}
\