当前位置: 首页 > news >正文

使用WPF调用Python进行图像灰度处理

1. 前言

在本文中,我们将通过WPF应用程序调用Python脚本进行图像灰度处理。我们将使用Python的OpenCV库来处理图像,并将其转换为灰度图像,然后通过WPF界面来启动Python进程并展示结果。
在这里插入图片描述

2. 准备工作

在开始之前,请确保系统已经安装了Python和.NET SDK,并且已经安装了Python的OpenCV库。

可以通过以下命令安装OpenCV库:

pip install opencv-python

3. 编写Python脚本

在项目目录下创建一个新的Python脚本文件image_processing.py,并编写以下代码:

import cv2
import sysdef convert_to_grayscale(image_path, output_path):# 读取图像image = cv2.imread(image_path)# 将图像转换为灰度gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 保存灰度图像cv2.imwrite(output_path, gray_image)if __name__ == "__main__":if len(sys.argv) != 3:print("Usage: python image_processing.py <input_image_path> <output_image_path>")else:input_image_path = sys.argv[1]output_image_path = sys.argv[2]convert_to_grayscale(input_image_path, output_path)

这个脚本将读取输入图像,将其转换为灰度图像,并将结果保存到指定的输出路径。

测试输入指令

python image_processing.py "C:\Users\Lenovo\Desktop\Snipaste_2024-06-21_23-20-30.png" "C:\Users\Lenovo\Desktop\output.jpg"

可以正常运行。

4. 创建WPF项目

首先,创建一个新的WPF应用程序:使用dotnet cli命令

dotnet new wpf -n WpfImageProcessingApp
cd WpfImageProcessingApp

4.1 设计WPF界面

打开MainWindow.xaml文件,设计一个简单的界面,包括两个按钮和一个图像展示控件:

<Window x:Class="WpfImageProcessingApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfImageProcessingApp"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid>
<Button x:Name="SelectImageButton" Content="Select Image" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Margin="10" Click="SelectImageButton_Click"/><Button x:Name="ProcessImageButton" Content="Process Image" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Margin="120,10,0,0" Click="ProcessImageButton_Click"/><Image x:Name="ImageDisplay" HorizontalAlignment="Left" VerticalAlignment="Top" Width="500" Height="250" Margin="10,50,0,0"/></Grid>
</Window>

在这里插入图片描述

4.2 编写WPF代码

MainWindow.xaml.cs文件中,编写以下代码:

using System;
using System.Diagnostics;
using System.Windows;
using Microsoft.Win32;
using System.IO;
using System.Windows.Media.Imaging;namespace WpfImageProcessingApp
{public partial class MainWindow : Window{private string selectedImagePath;private string outputImagePath;public MainWindow(){InitializeComponent();}private void SelectImageButton_Click(object sender, RoutedEventArgs e){OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.Filter = "Image files (*.jpg, *.jpeg, *.png) | *.jpg; *.jpeg; *.png";if (openFileDialog.ShowDialog() == true){selectedImagePath = openFileDialog.FileName;ImageDisplay.Source = new BitmapImage(new Uri(selectedImagePath));}}private void ProcessImageButton_Click(object sender, RoutedEventArgs e){if (string.IsNullOrEmpty(selectedImagePath)){MessageBox.Show("Please select an image first.");return;}outputImagePath = Path.Combine(Path.GetDirectoryName(selectedImagePath), "output.jpg");var startInfo = new ProcessStartInfo{FileName = "python",Arguments = $"image_processing.py \"{selectedImagePath}\" \"{outputImagePath}\"",RedirectStandardOutput = true,UseShellExecute = false,CreateNoWindow = true};try{using (var process = Process.Start(startInfo)){process.WaitForExit();if (process.ExitCode == 0){ImageDisplay.Source = new BitmapImage(new Uri(outputImagePath));}else{MessageBox.Show("An error occurred during image processing.");}}}catch (Exception ex){MessageBox.Show($"An error occurred: {ex.Message}");}}}
}

4.3 运行应用程序

运行WPF应用程序。点击“Select Image”按钮选择一张图像,
在这里插入图片描述
然后点击“Process Image”按钮进行灰度处理,处理后的图像将显示在界面上。
在这里插入图片描述

5. 总结

在本文中,我们展示了如何通过WPF应用程序调用Python脚本进行图像灰度处理。通过使用Python的OpenCV库进行图像处理,并通过启动Python进程来执行Python脚本和展示结果,我们实现了一个跨语言的图像处理应用。这一技术可以应用于各种需要结合C#和Python优势的图像处理项目中。

相关文章:

使用WPF调用Python进行图像灰度处理

1. 前言 在本文中&#xff0c;我们将通过WPF应用程序调用Python脚本进行图像灰度处理。我们将使用Python的OpenCV库来处理图像&#xff0c;并将其转换为灰度图像&#xff0c;然后通过WPF界面来启动Python进程并展示结果。 2. 准备工作 在开始之前&#xff0c;请确保系统已经…...

(二)测试工具

16. 如何进行浏览器兼容性测试? 正确回答通过率:38.0%[ 详情 ] 推荐指数: ★★★★★ 试题难度: 高难 1、兼容性测试含义 兼容性测试是指要测试的软件在不同的硬件平台上、不同的应用软件之间、不同的操作系统中、不同的网络环境中是否可以正常的运行、有无异常的测试过程…...

springboot 博客交流平台-计算机毕业设计源码56406

摘要 博客交流平台 作为一种重要的网络平台&#xff0c;为用户提供了展示自我、分享经验和与他人互动的空间。在国内外&#xff0c;研究者们关注博客交流平台 的各个方面&#xff0c;并取得了显著的进展。研究内容主要包括用户体验和界面设计、社交化和互动性、多媒体内容支持、…...

从0开始搭建vue + flask 旅游景点数据分析系统( 八):美化前端可视化图形

这一期来美化我们仅有的三个可视化图形&#xff08;可怜&#xff09;&#xff0c;毕竟&#xff0c;帅是一辈子的事。 1 折线图改面积图&#xff08;渐变色&#xff09; 需求&#xff1a;折线图改为蓝色的面积图&#xff0c;并且有一点的渐变色。 这个非常简单&#xff0c;只…...

【前端面试】七、算法-迭代器和生成器

目录 1.迭代器 2.生成器 1.迭代器 lterator&#xff1a;也被称作游标Cursor&#xff0c;是一种设计模式。迭代器提供了一种遍历内容的方法(比如 JS 迭代器中的next)&#xff0c;而不需要关心内部构造。 // 迭代器的遍历const s new Set([1,2,3,4,5])const it s.values()//…...

vs+qt一些问题

一直遇到的两个问题&#xff0c;今天解决了 1、 因为前后端分离&#xff0c;前端写完了&#xff0c;后端还在一直修改&#xff0c;但是每次都是单独打开的后端的sln&#xff0c;所以会出现这个&#xff0c;把前端的模块删掉就好了。 2、打开vs项目&#xff0c;很多报错&#…...

基于K8S配置Jenkins主从节点实例

基于K8S配置Jenkins主从节点实例 1.配置Jenkins主节点1.确认 Jenkins Pod 名称2.进入 Jenkins Pod&#xff1a;3.生成SSH密钥对4.将公钥复制到目标节点&#xff1a; 2.配置Jenkins的node1节点1.安装java2.配置 Jenkins node1节点的 Java 路径1.添加Java环境变量2.生效Java环境变…...

萱仔环境记录——git的安装流程

最近由于我有一个大模型的offer&#xff0c;由于我只在实验室的电脑上装了git&#xff0c;我准备在自己的笔记本上本地安装一个git&#xff0c;也给我的一个师弟讲解一下git安装和使用的过程&#xff0c;给我的环境安装章节添砖加瓦。 github是基于git的一个仓库托管平台。 g…...

品味食家巷蛋奶酪饼,感受西北美食魅力

在广袤的西北大地&#xff0c;美食的丰富多样令人叹为观止。而食家巷蛋奶酪饼&#xff0c;宛如一颗璀璨的明珠&#xff0c;散发着独特的魅力。 这款蛋奶酪饼&#xff0c;是传统工艺与现代口味的完美融合。而当你继续品尝&#xff0c;鸡蛋的鲜嫩和奶酪的浓郁醇厚便会在口中交融…...

常用的图像增强操作

我们将介绍如何用PIL库实现一些简单的图像增强方法。 [!NOTE] 初始化配置 import numpy as np from PIL import Image, ImageOps, ImageEnhance import warningswarnings.filterwarnings(ignore) IMAGE_SIZE 640[!important] 辅助函数 主要用于控制增强幅度 def int_param…...

探索TinyDB的轻量级魅力:Python中的微型数据库

文章目录 探索TinyDB的轻量级魅力&#xff1a;Python中的微型数据库背景&#xff1a;为何选择TinyDB&#xff1f;什么是TinyDB&#xff1f;如何安装TinyDB&#xff1f;5个简单的库函数使用方法3个场景下的应用实例常见问题与解决方案总结 探索TinyDB的轻量级魅力&#xff1a;Py…...

模型优化学习笔记—Adam算法

首先复习一下&#xff1a; 动量梯度下降&#xff1a; 1、算出dw、db 2、计算指数加权&#xff08;移动&#xff09;平均 vdw k *vdw (1-k)*dw vdb k *vdb (1-k)*db 3、梯度下降 w w - r*vdw b b - r*vdb RMSprop&#xff1a; 1、算出dw和db 2、算指数平均值&am…...

车辆出险报告(h5)-车辆出险记录接口-车辆相关接口

接口简介&#xff1a;通过vin及行驶证查询车辆出险、理赔、事故记录接口。查询成功率99%,返回URL地址的查询报告。 不能对返回的报告进行任何的修改&#xff0c;否则由用户自行承担相应的责任 报告结果只保留30天&#xff0c;如需永久保存&#xff0c;请您查询后自行保存 接口地…...

C基础项目(学生成绩管理系统)

目录 一、项目要求 二、完整代码实例 三、分文件编写代码实例 一、项目要求 1.系统运行&#xff0c;打开如下界面。列出系统帮助菜单&#xff08;即命令菜单&#xff09;&#xff0c;提示输入命令 2.开始时还没有录入成绩&#xff0c;所以输入命令 L 也无法列出成绩。应提…...

C# 设计模式之原型模式

总目录 前言 在软件系统中&#xff0c;当创建一个类的实例的过程很昂贵或很复杂&#xff0c;并且我们需要创建多个这样类的实例时&#xff0c;如果我们用new操作符去创建这样的类实例&#xff0c;这未免会增加创建类的复杂度和耗费更多的内存空间&#xff0c;因为这样在内存中…...

美林数据Tempo Talents | 两大资源中心,打造开放、成长型数智人才能力平台

在数字化时代的大潮中&#xff0c;高校作为知识与人才培养的重要阵地&#xff0c;独立分散的课程资源管理方式已无法满足现代教育的需求&#xff0c;而数据资源的分散和碎片化也阻碍了科研和教学工作的深入进行。那么&#xff0c;高校如何打造一个集中、高效的课程与数据资源中…...

IDC权威认可!工业领域最佳实践案例!

近日&#xff0c;IDC发布了《工业领域中数据管理分析服务最佳实践案例》报告&#xff0c;总结行业用户在应用过程中面临的主要挑战和实践路径&#xff0c;并评选最佳实践案例&#xff0c;为行业用户提供了相关的指导建议&#xff0c;供市场参考。星环科技中航电梯数据中台项目入…...

未授权访问漏洞系列详解①!

Redis未授权访问漏洞 Redis 默认情况下&#xff0c;会绑定在 0.0.0.0:6379 &#xff0c;如果没有进行采用相关的策略&#xff0c;比如添加防火墙规则避免其他非信任来源 ip 访问等&#xff0c;这样将会将 Redis 服务暴露到公网上&#xff0c;如果在没有设置密码认证(一般为空)的…...

第1天:Python基础语法(五)

正文&#xff1a; 在之前的文章中&#xff0c;我们已经学习了Python的基本语法集合和集合的一些常用操作。 在本篇文章中&#xff0c;我们将继续学习其他类型 字符串格式化 使用操作符%s来实现 ➢ 几个%s就几个变量 ➢ 超过一个变量时&#xff0c;需要用元组%&#xff08;…...

【c++】用C++制作一个简易windows系统

源码&#xff1a; #include <iostream> #include <cstdlib> // 为了使用system #include<limits> void clearScreen() {system("cls"); }void displayMenu() {clearScreen();std::cout << "1.我的文件" << std::endl;std::…...

2026年HR招聘偏好白皮书:这5项附加技能出现频率暴涨

2026 年的招聘市场&#xff0c;正在从“看你会什么岗位技能”&#xff0c;转向“看你能不能把岗位做得更智能”。HR筛简历时&#xff0c;越来越关注候选人的AI应用能力、数据化思维和业务落地能力。人社部近年发布的新职业中&#xff0c;已经出现生成式人工智能系统应用员、人工…...

如何在macOS上免费解锁QQ音乐加密文件:完整指南

如何在macOS上免费解锁QQ音乐加密文件&#xff1a;完整指南 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#xff0c;默认转换结果…...

Unity主题系统设计:状态驱动的主题抽象与自动注入方案

1. 这不是换个颜色那么简单&#xff1a;为什么Unity项目里“换肤”总在发布前夜崩盘&#xff1f;你有没有经历过这样的场景&#xff1a;美术同学凌晨两点发来一套新主题资源包&#xff0c;UI设计师说“这次配色更符合品牌调性”&#xff0c;产品说“上线前必须支持深色模式”&a…...

基于ATmega2560与ISD1700的智能语音时钟:硬件选型、软件架构与避坑指南

1. 项目概述与核心价值去年折腾那个用ATMega328驱动三块显示屏的时钟时&#xff0c;我主要精力都花在了如何在320x240的TFT屏幕上把时间、日期和图标画得又准又好看上。项目在《Elektor》杂志上发表后&#xff0c;一位热心的读者给我提了个新想法&#xff1a;能不能做个会“说话…...

Windows Cleaner深度解析:5大核心模块彻底解决系统空间不足问题

Windows Cleaner深度解析&#xff1a;5大核心模块彻底解决系统空间不足问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款完全免费开源的…...

【DeepSeek集成测试黄金标准】:20年专家亲授5大避坑指南与自动化落地框架

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek集成测试黄金标准的演进与核心价值 集成测试在大语言模型工程化落地过程中已从“验证功能可用”跃迁为“保障推理一致性、上下文鲁棒性与安全边界的三位一体质量门禁”。DeepSeek系列模型&…...

Jetson Orin上TVA模型DLA精准卸载配置

重磅预告&#xff1a;本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容&#xff0c;该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著&#xff0c;特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

红外信号逆向工程:破解电磁炉协议实现抽油烟机智能联动

1. 项目概述&#xff1a;当电磁炉与抽油烟机“对话”厨房里的自动化&#xff0c;听起来像是未来智能家居的专属&#xff0c;但其实很多乐趣和便利就藏在身边已有的设备里。我最近给家里的厨房换上了一台新的电磁炉&#xff0c;在翻阅说明书时&#xff0c;偶然发现了一个名为“h…...

OpenPLC虚拟PLC:5分钟搭建开源工业控制器的完整指南

OpenPLC虚拟PLC&#xff1a;5分钟搭建开源工业控制器的完整指南 【免费下载链接】OpenPLC Software for the OpenPLC - an open source industrial controller 项目地址: https://gitcode.com/gh_mirrors/op/OpenPLC 想要零成本学习工业自动化&#xff1f;OpenPLC虚拟PL…...

从自然语言到可视化洞察:ChartGPT如何用AI重构数据图表生成范式

从自然语言到可视化洞察&#xff1a;ChartGPT如何用AI重构数据图表生成范式 【免费下载链接】chart-gpt AI tool to build charts based on text input 项目地址: https://gitcode.com/gh_mirrors/ch/chart-gpt 在数据驱动的决策时代&#xff0c;业务人员与技术团队之间…...