我是opencv的新手,只是設法遵循opencv-rust api,撰寫這些代碼來翻轉,但不知何故它不起作用。有什么建議嗎?
貨運.toml
[package]
name = "op"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
opencv = "0.62"
bytes = "1"
anyhow = "1"
main.rs
use anyhow::Result;
use opencv::{
core::{self, Mat, Vector},
imgcodecs,
prelude::*,
};
use bytes::Bytes;
fn main() -> Result<()> {
let data = include_bytes!("../rust-logo.png");
let src = Mat::from_slice::<u8>(data.as_ref())?;
let dest = imgcodecs::imdecode(&src, imgcodecs::IMREAD_COLOR);
//flip
let mut dest = Mat::default();
core::flip(&src, &mut dest, 0);
let mut params: Vector<i32> = Vector::new();
params.push(imgcodecs::ImwriteFlags::IMWRITE_JPEG_QUALITY as i32);
imgcodecs::imwrite(&"rust-logo-flip.png", &dest, ¶ms)?;
Ok(())
}
運行代碼,首先安裝opencv llvm,例如。brew install opencv llvm
;匯出環境路徑export DYLD_FALLBACK_LIBRARY_PATH="$(xcode-select --print-path)/usr/lib/"
uj5u.com熱心網友回復:
正如評論中已經提到的,您隱藏了第一個dest變數。除此之外imgcodecs::imdecode()回傳一個結果,你必須先解包。
這是您的代碼的一個版本,只需對其進行少量更改即可使其正常作業:
use anyhow::Result;
use opencv::{
core::{self, Mat, Vector},
imgcodecs,
};
fn main() -> Result<()> {
let data = include_bytes!("../rust-logo.png");
let src = Mat::from_slice::<u8>(data.as_ref())?;
let src_decoded = imgcodecs::imdecode(&src, imgcodecs::IMREAD_COLOR)?;
//flip
let mut dest = Mat::default();
core::flip(&src_decoded, &mut dest, 0)?;
let mut params: Vector<i32> = Vector::new();
params.push(imgcodecs::ImwriteFlags::IMWRITE_JPEG_QUALITY as i32);
imgcodecs::imwrite(&"rust-logo-flip.png", &dest, ¶ms)?;
Ok(())
}
但是有一個問題。如果您使用 rust 標志,它可能會在透明背景上有黑色標志。如果您像當前那樣寫入沒有透明度的 PNG,這將導致全黑影像。然而,這與翻轉操作無關,它只是一些可能不直觀的行為。
出于這個原因,我建議翻轉影像,如下所示:
use anyhow::Result;
use opencv::{
core::{self, Mat, Vector},
imgcodecs,
};
fn main() -> Result<()> {
let src_decoded = imgcodecs::imread("rust-logo.png", imgcodecs::IMREAD_UNCHANGED)?;
// Flip image
let mut dest = Mat::default();
core::flip(&src_decoded, &mut dest, 0)?;
let params: Vector<i32> = Vector::new();
imgcodecs::imwrite("rust-logo-flip.png", &dest, ¶ms)?;
Ok(())
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/408484.html
標籤:
