当前位置: 首页> 财经> 股票 > 做营销型网站公司_餐厅设计_电商运营主要做什么_推动防控措施持续优化

做营销型网站公司_餐厅设计_电商运营主要做什么_推动防控措施持续优化

时间:2025/7/9 23:46:10来源:https://blog.csdn.net/m0_44975814/article/details/145772934 浏览次数:0次
做营销型网站公司_餐厅设计_电商运营主要做什么_推动防控措施持续优化

第一步、打开vs2019(其他版本的也可以),创建新项目

第二步、选择c++,并创建dll 项目

 

 第三步、在vs2019新项目中配置opencv

 

第四步、配置完成后写代码(写在dllmain.cpp中)

#include "pch.h"
#include <opencv2/opencv.hpp>
#include <iostream>// 定义导出函数
extern "C" __declspec(dllexport) bool ConvertToGrayscale(const char* inputPath, const char* outputPath) {try {// 读取输入图像cv::Mat image = cv::imread(inputPath);if (image.empty()) {std::cerr << "Could not open or find the image" << std::endl;return false;}// 将图像转换为灰度图像cv::Mat grayImage;cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);// 保存灰度图像bool saved = cv::imwrite(outputPath, grayImage);if (!saved) {std::cerr << "Could not save the grayscale image" << std::endl;return false;}return true;}catch (const cv::Exception& e) {std::cerr << "OpenCV exception: " << e.what() << std::endl;return false;}
}

第五步、生成完成后在debug中有dll文件拷贝到WPF的根目录下,如果拷贝到根目录下还没成功的话写好具体地址。

 WPF代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Runtime.InteropServices;
using System.IO;namespace WpfAppopencvsharp
{public partial class MainWindow : Window{// 导入DLL中的函数D:\\codeproject\\WpfAppopencvsharp\\WpfAppopencvsharp\\bin\\Debug\\dll\\x64\\[DllImport("D:\\codeproject\\WpfAppopencvsharp\\WpfAppopencvsharp\\bin\\Debug\\dll\\x64\\TestDll.dll", CallingConvention = CallingConvention.Cdecl)]public static extern bool ConvertToGrayscale(string inputPath, string outputPath);public MainWindow(){InitializeComponent();}private void ChangeImage(object sender, RoutedEventArgs e){// 加载图片资源(确保路径正确)var imagePath = "C:\\Users\\1\\Desktop\\11.jpg"; // 如果图片在Resources文件夹中,使用这种方法加载。如果不是,使用相对路径或绝对路径。imageControl.Source = new BitmapImage(new Uri(imagePath, UriKind.Absolute));}private void GrayImage(object sender, RoutedEventArgs e){// 输入和输出图像的路径string inputPath = "C:\\Users\\1\\Desktop\\11.jpg";string outputPath = "D:\\codeproject\\WpfAppopencvsharp\\output.jpg";// 调用DLL函数bool success = ConvertToGrayscale(inputPath, outputPath);if (success){MessageBox.Show("图像转换成功!");// 显示灰度图像if (File.Exists(outputPath)){BitmapImage bitmap = new BitmapImage();bitmap.BeginInit();bitmap.UriSource = new Uri(outputPath, UriKind.RelativeOrAbsolute);bitmap.EndInit();// 假设XAML中有一个名为image的Image控件imageControl.Source = bitmap;}}else{MessageBox.Show("图像转换失败!");}}}
}

第六步、运行一下

以上是具体步骤,有opencv和wpf基础的可参考以下: 

1. 创建 C++ DLL 项目

步骤:
  1. 打开 Visual Studio,创建一个新的 “动态链接库 (DLL)” 项目。
  2. 确保已安装 OpenCV 库,并配置项目的包含目录、库目录和链接器输入。
代码实现:
#include <opencv2/opencv.hpp>
#include <iostream>// 定义导出函数
extern "C" __declspec(dllexport) bool ConvertToGrayscale(const char* inputPath, const char* outputPath) {try {// 读取输入图像cv::Mat image = cv::imread(inputPath);if (image.empty()) {std::cerr << "Could not open or find the image" << std::endl;return false;}// 将图像转换为灰度图像cv::Mat grayImage;cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);// 保存灰度图像bool saved = cv::imwrite(outputPath, grayImage);if (!saved) {std::cerr << "Could not save the grayscale image" << std::endl;return false;}return true;}catch (const cv::Exception& e) {std::cerr << "OpenCV exception: " << e.what() << std::endl;return false;}
}
代码解释:
  • ConvertToGrayscale 函数接受两个参数:输入图像的路径和输出灰度图像的路径。
  • 使用 cv::imread 读取输入图像。
  • 使用 cv::cvtColor 将图像转换为灰度图像。
  • 使用 cv::imwrite 保存灰度图像。

2. 编译 DLL

编译项目,生成 DLL 文件。确保将 OpenCV 的动态链接库(.dll 文件)复制到生成的 DLL 文件所在的目录。

3. 创建 C# WPF 应用程序

步骤:
  1. 打开 Visual Studio,创建一个新的 “WPF 应用程序” 项目。
代码实现:
using System;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Media.Imaging;
using System.IO;namespace WpfApp1
{public partial class MainWindow : Window{// 导入DLL函数[DllImport("YourDllName.dll", CallingConvention = CallingConvention.Cdecl)]public static extern bool ConvertToGrayscale(string inputPath, string outputPath);public MainWindow(){InitializeComponent();// 输入和输出图像的路径string inputPath = "input.jpg";string outputPath = "output.jpg";// 调用DLL函数bool success = ConvertToGrayscale(inputPath, outputPath);if (success){MessageBox.Show("图像转换成功!");// 显示灰度图像if (File.Exists(outputPath)){BitmapImage bitmap = new BitmapImage();bitmap.BeginInit();bitmap.UriSource = new Uri(outputPath, UriKind.RelativeOrAbsolute);bitmap.EndInit();// 假设XAML中有一个名为image的Image控件image.Source = bitmap;}}else{MessageBox.Show("图像转换失败!");}}}
}
XAML 代码:
<Window x:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="450" Width="800"><Grid><Image x:Name="image" HorizontalAlignment="Left" Height="300" VerticalAlignment="Top" Width="300"/></Grid>
</Window>
代码解释:
  • 使用 [DllImport] 特性导入 C++ DLL 中的 ConvertToGrayscale 函数。
  • 在 MainWindow 构造函数中调用该函数,将输入图像转换为灰度图像。
  • 如果转换成功,显示成功消息并在 Image 控件中显示灰度图像。

4. 注意事项

  • 确保 C# 项目中引用的 DLL 文件名与 C++ 项目生成的 DLL 文件名一致。
  • 确保输入图像文件存在于指定的路径。
  • 确保将 OpenCV 的动态链接库复制到 C# 应用程序的可执行文件所在的目录。

通过以上步骤,你可以将图像转换为灰度图像的功能封装成 DLL,并在 C# WPF 应用程序中调用该 DLL。

关键字:做营销型网站公司_餐厅设计_电商运营主要做什么_推动防控措施持续优化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: