当前位置: 首页 > 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::…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...