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

DLSS Swapper技术解析:3层架构实现游戏性能优化自动化

DLSS Swapper技术解析&#xff1a;3层架构实现游戏性能优化自动化 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper作为一款专注于DLSS、FSR和XeSS动态链接库管理的开源工具&#xff0c;通过创新的三层架构…...

【05-log-+-diff:看懂你改了什么、历史是什么】

第五篇&#xff1a;log diff&#xff1a;看懂你改了什么、历史是什么会提交只是第一步&#xff0c;会"读"历史才是真的用上了 Git。这篇教你把 log 和 diff 玩出花来。git log&#xff1a;查看提交历史 git log默认输出太详细&#xff0c;通常用这些参数来精简&…...

RePKG技术探索:Wallpaper Engine资源解析工具深度剖析

RePKG技术探索&#xff1a;Wallpaper Engine资源解析工具深度剖析 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 一、认知困境&#xff1a;数字资源的格式壁垒 创意工作者的格式枷…...

CLAP模型量化压缩实战:8位整数量化指南

CLAP模型量化压缩实战&#xff1a;8位整数量化指南 1. 引言 如果你正在为嵌入式设备部署音频AI模型而苦恼&#xff0c;那么CLAP模型的量化压缩可能就是你要找的解决方案。CLAP&#xff08;对比语言-音频预训练&#xff09;模型虽然功能强大&#xff0c;但其庞大的参数量让在资…...

Qwen3-14B私有部署效果展示:中文对话、推理、生成真实案例集

Qwen3-14B私有部署效果展示&#xff1a;中文对话、推理、生成真实案例集 1. 开箱即用的私有部署体验 Qwen3-14B私有部署镜像为开发者提供了前所未有的便捷体验。基于RTX 4090D 24GB显存环境优化&#xff0c;这个镜像真正做到了"下载即用"——无需配置复杂环境&…...

cv_resnet101_face-detection_cvpr22papermogface真实应用:社区门禁抓拍图自动人数统计

cv_resnet101_face-detection_cvpr22papermogface真实应用&#xff1a;社区门禁抓拍图自动人数统计 1. 项目简介 今天给大家介绍一个特别实用的工具——基于MogFace模型的高精度人脸检测系统。这个工具最大的特点就是能在本地电脑上快速准确地识别人脸&#xff0c;自动统计人…...

C++ 内存管理:从unique_ptr到内存泄漏

引言 在C++编程中,智能指针是管理动态内存的重要工具。它们通过自动管理内存分配和释放,极大减少了程序员的手动管理负担。然而,尽管unique_ptr被设计为一个所有权唯一的智能指针,它仍然可能导致内存泄漏或资源循环引用。本文将通过一个实际例子来探讨unique_ptr如何在不经…...

90% 的代码交给 AI 后,人还剩什么本事?

问题定义、架构决策、结果取舍。 Cognition AI 及其研发的智能体 Devin 如何重塑软件工程的未来。作者指出&#xff0c;AI 已经能够接管 90% 的底层执行工作&#xff0c;包括编写代码和修复漏洞&#xff0c;使人类工程师从琐碎的实现细节中解放出来。在这一范式转变下&#xff…...

SEO的发展趋势会是什么样的

SEO的发展趋势会是什么样的 在互联网的快速发展中&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;技术一直是网站排名和流量增长的关键。随着技术的不断进步&#xff0c;SEO的发展趋势也在不断演变。未来SEO的发展趋势会是什么样的呢&#xff1f;本文将从多个角度探讨这…...

【原创改进代码】考虑电动汽车移动储能特性的多区域电网功率波动平抑优化调控附python代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子…...