Rust와 OpenCV를 사용하여 기본적인 이미지 처리 방법에 대해 알아보도록 하겠습니다. 이미지를 표시하고 저장하는 기본적인 작업부터 차근차근 시작해볼게요! 🎨
📚 목차
- 환경 설정
- 이미지 표시하기
- 이미지 저장하기
- 전체 구현 코드
- 자주 발생하는 문제와 해결방법
🔧 환경 설정
이미지 처리의 첫 걸음! 먼저 필요한 OpenCV 모듈들을 가져와야 합니다:
use opencv::{
core::{self, MatTraitConst},
highgui,
imgcodecs,
Result
};
🖥️ 이미지 표시하기
OpenCV에서 가장 기본이 되는 작업은 이미지를 불러와서 화면에 표시하는 것입니다.
pub fn display_image() -> Result<()> {
// Load the image
let src = imgcodecs::imread(
"./img/lion.jpeg",
imgcodecs::IMREAD_COLOR
)?;
// Display the image
highgui::imshow("Image Display", &src)?;
// Wait for 10 seconds
highgui::wait_key(10000)?;
// Clean up
highgui::destroy_all_windows()?;
Ok(())
}
💾 이미지 저장하기
이미지를 저장할 때는 품질과 적절한 처리를 위해 몇 가지 단계가 더 필요합니다.
1️⃣ 이미지 행렬 생성
let mut src = core::Mat::default();
src = imgcodecs::imread("./img/lion.jpeg", imgcodecs::IMREAD_COLOR)?;
2️⃣ 이미지 데이터 유효성 검사
if src.empty() {
println!("Image load failed");
std::process::exit(0);
}
3️⃣ 품질 매개변수 설정
let mut params = core::Vector::default();
params.push(imgcodecs::IMWRITE_JPEG_QUALITY); // Quality parameter
params.push(95); // Quality value (0-100)
4️⃣ 이미지 저장
imgcodecs::imwrite(
"./img/write_test.png",
&src,
¶ms
)?;
📝 전체 구현 코드
이미지 불러오기와 저장을 모두 구현한 완성된 코드입니다!
use opencv::{
core::{self, MatTraitConst},
highgui,
imgcodecs,
Result
};
pub fn main() -> Result<()> {
// Initialize default matrix
let mut src = core::Mat::default();
// Load image
src = imgcodecs::imread(
"./img/lion.jpeg",
imgcodecs::IMREAD_COLOR
)?;
// Validate image loading
if src.empty() {
println!("Image load failed");
std::process::exit(0);
}
// Set quality parameters for saving
let mut params = core::Vector::default();
params.push(imgcodecs::IMWRITE_JPEG_QUALITY);
params.push(95); // High quality (0-100)
// Save image
imgcodecs::imwrite(
"./img/write_test.png",
&src,
¶ms
)?;
// Display image
highgui::imshow("image", &src)?;
// Wait for 10 seconds
highgui::wait_key(10000)?;
// Clean up
highgui::destroy_all_windows()?;
Ok(())
}

⚠️ 자주 발생하는 문제와 해결방법
🔍 이미지 로딩 실패
- 파일 경로가 정확한지 확인
- 파일 권한이 있는지 확인
- 지원되는 이미지 형식인지 확인
📊 품질 설정 가이드
- JPEG 품질 (0-100): ⭐⭐⭐ 95-100: 최상 품질 ⭐⭐ 80-90: 좋은 품질 ⭐ 60-70: 중간 품질 💫 60 미만: 낮은 품질
🎯 메모리 관리
- destroy_all_windows() 호출은 필수
- Rust의 소유권 시스템을 잘 활용해야합니다
- Result로 에러를 처리해야합니다.
🎯 다음 단계
더 발전하고 싶다면 이런 것들을 시도해보세요!
- 🖼️ 다양한 이미지 형식 시도 (PNG, JPEG, BMP)
- ⚙️ 여러 품질 설정 테스트
- 🛠️ 에러 처리 개선
- 🔄 여러 이미지 작업 연결
728x90
'AI > OpenCV' 카테고리의 다른 글
| 🔍 Rust에서의 OpenCV사용하기 (9) | 2024.11.18 |
|---|