我想知道如何对特定窗口的一部分进行屏幕截图。应用程序顶部可能有一个覆盖层(游戏覆盖层),隐藏了我感兴趣的内容。我想找到一种方法,只对应用程序进行屏幕截图,忽略覆盖层或顶部的内容。
我想知道是否有可能优化它,以便有**~5截图/秒**
现在我尝试使用screenshots货物包,代码如下:
use opencv::{core, highgui, imgcodecs};
use screenshots::Screen;
use std::{time::Instant};
use opencv::core::{log, Mat};
const WIDTH: i32 = 275;
const HEIGHT: i32 = 275;
fn get_img(screen: Screen) -> Mat {
let image = screen.capture().unwrap();
let buffer: Vec<u8> = image.into();
// Change image type to OpenCV Mat
let original_image: Mat = imgcodecs::imdecode(&core::Mat::from_slice(buffer.as_slice()).unwrap(), imgcodecs::IMREAD_COLOR).unwrap();
return original_image;
}
fn main() {
let window_name = "test".to_owned();
highgui::named_window(&window_name, highgui::WINDOW_NORMAL).unwrap();
highgui::resize_window(&window_name, WIDTH, HEIGHT).unwrap();
let screens = Screen::all().unwrap();
let screen = screens[1].clone();
let mut img = get_img(screen);
loop {
let now = Instant::now();
img = get_img(screen);
// print in console the time it took to process the image
println!("{} ms", now.elapsed().as_millis());
}
}
但它似乎不可能采取屏幕截图只是一个特定的窗口背后的覆盖。
我使用cargo run --release
目标操作系统是Windows,我也在Windows下开发。
ps:我将我的图像转换为OpenCV Mat以用于下一部分代码
1条答案
按热度按时间0pizxfdo1#
您可以使用
winapi
和user32
repo获取任何窗口截图。错误,你可能已经使用onencv库,不工作在Windows上.
这是我的示例代码。假设我们有一个名为“Chrome”的窗口
你可以通过输入
cargo run
来运行它。