PowerShell实现读取照片并做灰度处理
生活随笔
收集整理的這篇文章主要介紹了
PowerShell实现读取照片并做灰度处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Powershell一直是我的學習目標。做一個小例子。PowerShell實現讀取照片并做灰度處理。還想要保存這張灰度照片并直接打開查看。
分析需求:
【讀取照片】 需要借助.net framework中的程序集 System.Drawing
【灰度處理】 需要做圖像處理----灰度處理,需要重新計算每個像素信息,使用灰階轉換公式 L = 0.299*R + 0.587*G + 0.114*B
【保存照片】 同樣需要System.Drawing程序集
【打開文件】 使用 Invoke-Item 命令 或者 &
設計腳本:
Add-Type -AssemblyName System.Drawing
# 定義根目錄下的圖片路徑(假設文件名為 input.jpg)
$inputPath = Join-Path $PSScriptRoot "input.jpg"
$outputPath = Join-Path $PSScriptRoot "output.jpg"
# 檢查輸入文件是否存在
if (-not (Test-Path $inputPath)) {
Write-Host "錯誤:根目錄下未找到 input.jpg 文件!"
exit
}
try {
# 加載原始圖片
$originalImage = [System.Drawing.Bitmap]::FromFile($inputPath)
# 創建灰度圖像對象
$grayImage = New-Object System.Drawing.Bitmap($originalImage.Width, $originalImage.Height)
# 遍歷每個像素進行灰度化處理
for ($x = 0; $x -lt $originalImage.Width; $x++) {
for ($y = 0; $y -lt $originalImage.Height; $y++) {
$pixel = $originalImage.GetPixel($x, $y)
# 計算灰度值(加權平均法)
$grayValue = [int](0.299 * $pixel.R + 0.587 * $pixel.G + 0.114 * $pixel.B)
$grayColor = [System.Drawing.Color]::FromArgb($grayValue, $grayValue, $grayValue)
$grayImage.SetPixel($x, $y, $grayColor)
}
}
# 保存黑白圖片
$grayImage.Save($outputPath, [System.Drawing.Imaging.ImageFormat]::Jpeg)
Write-Host "已生成黑白圖片:$outputPath"
# 使用默認程序展示圖片
Invoke-Item $outputPath
}
catch {
Write-Host "處理過程中發生錯誤:$_"
}
finally {
# 釋放資源
if ($originalImage) { $originalImage.Dispose() }
if ($grayImage) { $grayImage.Dispose() }
}
PS: ?
$grayValue = [int](0.299 * $pixel.R + 0.587 * $pixel.G + 0.114 * $pixel.B)
其中,grayValue 是灰階值,R、G、B分別是紅色、綠色和藍色通道的值。這個公式是基于人眼對不同顏色敏感度的研究結果得出的。在這個公式中,綠色的權重最高,因為人眼對綠色最為敏感,其次是紅色,最后是藍色。這種權重分配在早期電視技術中被采納,以模擬人眼感知亮度的方式優化信號傳輸。
ok! 腳本運行后,會在其根目錄下生成 output.jpg 文件,系統會使用默認軟件打開該圖片文件,可看到最后效果。下面給出參考結果。
總結
以上是生活随笔為你收集整理的PowerShell实现读取照片并做灰度处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hibernate的inverse用法
- 下一篇: 设计模式初探之设计模式六大原则(4):接