rust 操作图像, 比较颜色, 控制GUI

1.  rsautogui

2. color_space 比较颜色

3. dssim 比较图像相似度

4. image 图像

 5. image-compare

 

 

Color-space是一个用于处理颜色空间转换和计算颜色相似度的Rust库。该库支持多种颜色空间,如RGB、HSL、HSV、Lab等,并提供了各种计算颜色相似度的方法。

以下是使用color-space库检测颜色相似度的示例代码:

 

 

[dependencies]
color_space = "0.5.3"


use color_space::{Lab, Rgb, FromRgb, CompareCie2000};


fn main() {
        
    // 定义两个颜色
    let color1 = Rgb::new(255.0, 0.0, 0.0);
    let color2 = Rgb::new(255.0, 1.0, 0.0);

    // 将RGB颜色转换为Lab颜色空间
    let lab1 = Lab::from_rgb(&color1);
    let lab2 = Lab::from_rgb(&color2);

    // 计算两个颜色之间的Delta E值
    // let delta_e = color1.diff(color2);
    let delta_e = lab1.compare_cie2000(&lab2);

    println!("Delta E between color1 and color2: {}", delta_e);
}

  

 

 

===================================================================================================================

在Rust语言中,有多个用于检测图像相似度的库。以下是其中几个常用的库:

Image: Image是一个用于处理图像的Rust库,它提供了各种图像处理功能,包括图像相似度检测。可以使用Image库中的image::imageops::diff函数计算两张图像之间的差异,并得出它们的相似度。

OpenCV: OpenCV是一个流行的用于计算机视觉和图像处理的C++库。Rust语言中也有对应的OpenCV库,可以使用它来检测图像相似度。OpenCV库提供了多种计算图像相似度的方法,如均方差、结构相似性指数等。

RustCV: RustCV是一个基于Rust语言的计算机视觉库,它提供了各种图像处理和计算机视觉算法。RustCV库中包含了多个用于计算图像相似度的函数和算法,如均方误差、归一化互相关等。

Imageproc: Imageproc是一个用于图像处理的Rust库,它提供了各种图像处理函数和算法。Imageproc库中也包含了用于计算图像相似度的函数和算法,如均方误差、结构相似性指数等。

以上是几个常用的用于检测图像相似度的Rust库,具体使用哪个库取决于具体需求和应用场景。

===================================================================================================================

 

 

[dependencies]
image = "0.24.6"



use image::{DynamicImage, GenericImageView};
use image::Rgba;

fn main() {
    // compare two pixel difference.
    let color1 = Rgba([255, 255, 0, 255]);
    let color2 = Rgba([255, 255, 0, 255]);

    let diff = pixel_diff(color1, color2);

    println!("The difference between the colors is {}", diff);


    // // Load the images
    // let img1 = image::open("1.png").unwrap();
    // let img2 = image::open("2.png").unwrap();

    // // Get the dimensions of the images
    // let (width, height) = img1.dimensions();

    // // Calculate the difference between the two images
    // let mut sum_diff = 0.0;
    // for x in 0..width {
    //     for y in 0..height {
    //         let pixel1 = img1.get_pixel(x, y);
    //         let pixel2 = img2.get_pixel(x, y);
    //         let diff = pixel_diff(pixel1, pixel2);
    //         sum_diff += diff;
    //     }
    // }

    // // Calculate the average difference
    // let avg_diff = sum_diff / (width * height) as f64;

    // // Print the result
    // println!("The similarity between the two images is {}", 1.0 - avg_diff);
}

// Calculate the difference between two pixels
fn pixel_diff(pixel1: image::Rgba<u8>, pixel2: image::Rgba<u8>) -> f64 {
    let r_diff = pixel1[0] as f64 - pixel2[0] as f64;
    let g_diff = pixel1[1] as f64 - pixel2[1] as f64;
    let b_diff = pixel1[2] as f64 - pixel2[2] as f64;
    (r_diff * r_diff + g_diff * g_diff + b_diff * b_diff) / 3.0
}

  

posted @ 2023-03-28 16:23  CrossPython  阅读(931)  评论(0)    收藏  举报