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实现读取照片并做灰度处理的更多相关文章
- java读取照片信息 获取照片拍摄时的经纬度
项目结构 源码:ImageInfo.zip 第一步:添加需要的架包metadate-extractor.jar 架包下载地址:https://code.google.com/p/metadata-ex ...
- Android、iOS、和Web如何做灰度发布?
主要参考了: https://www.zhihu.com/question/21714205 https://www.zhihu.com/question/28296375 一.概述 ...
- Python 读取照片的信息:拍摄时间、拍摄设备、经纬度等,以及根据经纬度通过百度地图API获取位置
通过第三方库exifread读取照片信息.exifread官网:https://pypi.org/project/ExifRead/ 一.安装exifreadpip install exifread ...
- android调用照相机拍照获取照片并做简单剪裁
引用转载http://www.cnblogs.com/eyu8874521/archive/2012/07/20/2600697.html 效果: 客服端代码: package com.cn.lx ...
- SharePoint自动化系列——通过PowerShell在SharePoint中批量做数据
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ PowerShell是基于.NET的一门脚本语言,对于SharePoint一些日常操作支持的很好. ...
- python 编程中的一个关于图片的库 imageio (读取照片RGB内容,转换照片格式)
最近在看机器学习方面的东西,经常遇到需要把某个类型的照片中 RGB 内容读取出来, 在python中照片显示用matplotlib就可以做到,但是导入不同格式的照片,保持出不同格式的照片numpy, ...
- 在Android 上运行 openCV ,并做灰度变化的一个例子
OpenCVImageProcessing1. 导入Opencv的 androrid SDK灰度算法 OpenCVImageProcessing 导入opencv Jar包,配置OpenCVLibra ...
- Python小列子-读取照片位置
Python exifread Python利用exifread库来解析照片的经纬度,对接百度地图API显示拍摄地点. import exifread import re import json im ...
- 小程序 读取照片 EXIF 元信息
安装 exif.js npm install exif-js --save UI <button type="primary" @click="onExif&quo ...
- C#&.Net干货分享-构建Aocr_ImageHelper读取图片文字做解析
直接源码,就是这么干脆... namespace Frame.Image{ /// <summary> /// /// </summary> publ ...
随机推荐
- 那些年,我们一起追的 WLB
2019年,那一年,我29岁. 那一年,"996是福报"的言论在网络上引发舆论轩然大波. 那一年,"大小周"."996"."007 ...
- Kali Linux上安装Openvas 漏洞分析器
第一步:安装 apt-get update apt-get install openvas openvas-setup 第二步:自定义密码 openvas-stop #停止openvas服务 open ...
- 【Vue】vue基础学习笔记
目录 基础 差值语法 模板语法 数据绑定 el与data的两种写法 el与data写法1 el写法2:挂载 data写法2:函数式写法 绑定样式 绑定class样式 绑定style样式 条件渲染 基础 ...
- sed 指定行后或行前插入
sed 功能非常强大,这里主要列出一些工作中常用到的举例,以后再追加 示例文本 example.cfg Config = { a = 1, b = 1024, c = { ErrLevel = 4, ...
- IDEA自动导包(全局设置)
选择[File]-->[other settings]-->[settings for new projects](全局设置),然后搜索[Auto Import],勾选以下两个选项即可: ...
- Debian 9.5 解决中文显示乱码
一.首先检查LOCALE情况 说明:DEBIAN因为基于GNU所以,对不同地域进行了不同的包支持,以LOCALE形式存在. 1.启动终端 #apt-get install locales 2.重新配置 ...
- Qt编写物联网管理平台45-采集数据转发
一.前言 本系统严格意义上说是一个直连硬件的客户端软件,下面接的modbus协议的设备直接通过网络或者串口和软件通信,软件负责解析数据和存储记录.有时候客户想要领导办公室或者分管这一块的部门经理办公室 ...
- Qt编写的项目作品8-视频综合应用示例
一.功能特点 1.1 基础功能 支持各种音频视频文件格式,比如mp3.wav.mp4.asf.rm.rmvb.mkv等. 支持本地摄像头设备,可指定分辨率.帧率. 支持各种视频流格式,比如rtp.rt ...
- Qt编写项目作品27-多线程文件传输
一.功能特点 多线程收发文件,支持加密传输. 接收端支持监听端口接收文件和主动连接服务器接收文件两种方式. 按照 文件开始符+文件大小+文件内容+文件结束符 逐个分包接收. 可对接收的加密过的文件包进 ...
- 20. C++快速入门--并发基础
参考:<Professional c++>,<并发编程实战> 1 基本概念 1.1 竞争 原子性 "原子"(atomic)操作是指一种不可分割的操作, 即在 ...