Winform +OpenCvSharp更换证件照底色

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private string selectedImagePath;
        Color backColor = Color.Empty;
        private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            if ("tslSelectImage".Equals(e.ClickedItem.Name))
            {
                using OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.Filter = "Image Files (*.bmp, *.jpg, *.png)|*.bmp;*.jpg;*.png";
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    selectedImagePath = openFileDialog.FileName;
                    Image selectedImage = Image.FromFile(selectedImagePath);
                    if (pictureBox1.Image != null)
                        pictureBox1.Image.Dispose();
                    pictureBox1.Image = selectedImage;
                    if (backColor != Color.Empty)
                    {
                        ChangeImage(selectedImagePath, backColor);
                    }
                }
            }
            else if ("tslSelectBackColor".Equals(e.ClickedItem.Name))
            {
                if (string.IsNullOrEmpty(selectedImagePath))
                {
                    MessageBox.Show("请选择图像");
                    return;
                }
                // 设置允许选择所有颜色
                colorDialog1.FullOpen = true;
                // 设置是否显示帮助按钮
                colorDialog1.ShowHelp = true;
                // 设置是否只显示纯色
                colorDialog1.SolidColorOnly = true;
                // 如果用户选择了颜色,更新Label控件的背景颜色
                if (colorDialog1.ShowDialog() == DialogResult.OK)
                {
                    var color = colorDialog1.Color;
                    backColor = color;
                    ChangeImage(selectedImagePath, color);
                }
            }
            else if ("tslSave".Equals(e.ClickedItem.Name))
            {
                if (pictureBox2.Image != null)
                {
                    // 创建FolderBrowserDialog对象
                    FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();

                    // 设置对话框的描述文本
                    folderBrowserDialog.Description = "选择保存图像的文件夹";

                    // 显示对话框并检查用户是否点击了确定按钮
                    if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
                    {
                        string folderPath = folderBrowserDialog.SelectedPath;
                        string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".png";
                        string filePath = Path.Combine(folderPath, fileName);
                        try
                        {
                            pictureBox2.Image.Save(filePath);
                            // 显示保存成功的消息框
                            MessageBox.Show("文件保存成功!");
                        }
                        catch (Exception ex)
                        {
                            // 显示保存失败的消息框,并输出异常信息
                            MessageBox.Show("文件保存失败:" + ex.Message);
                        }
                    }
                }
            }
        }
        private void ChangeImage(string path, Color color)
        {
            if (string.IsNullOrEmpty(selectedImagePath))
            {
                return;
            }
            var bytes = Change2(selectedImagePath, color);
            using (MemoryStream memoryStream = new MemoryStream(bytes))
            {
                if (pictureBox2.Image != null)
                    pictureBox2.Image.Dispose();
                pictureBox2.Image = new Bitmap(memoryStream);
            }
        }
        private byte[] Change2(string path, Color color)
        {
            // 读取照片
            using Mat img = Cv2.ImRead(path);
            // 图片转换为灰度图
            using Mat hsv = new Mat();
            Cv2.CvtColor(img, hsv, ColorConversionCodes.BGR2HSV);
            // 假设背景颜色区域为图像左上角50x50的区域
            using Mat background = new Mat(hsv, new Rect(0, 0, 50, 50));
            Scalar mean = Cv2.Mean(background);
            // 图片的二值化处理
            int hRange = trackBar1.Value; // 默认色调范围
            int sRange = trackBar2.Value; // 默认饱和度范围
            int vRange = trackBar3.Value; // 默认亮度范围
            Scalar lower = new Scalar(mean.Val0 - hRange, mean.Val1 - sRange, mean.Val2 - vRange);
            Scalar upper = new Scalar(mean.Val0 + hRange, mean.Val1 + sRange, mean.Val2 + vRange);
            using Mat mask = new Mat();
            Cv2.InRange(hsv, lower, upper, mask);
            // 腐蚀膨胀
            using Mat erode = new Mat();
            Cv2.Erode(mask, erode, 1);
            using Mat dilate = new Mat();
            Cv2.Erode(erode, dilate, 1);
            // 颜色替换
            Scalar replaceColor = new Scalar(color.B, color.G, color.R);
            using  Mat result = img.Clone();
            result.SetTo(replaceColor, dilate);
            // 将替换后的图像复制回原始图像
            result.CopyTo(img, dilate);
            return img.ToBytes();
        }

        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            ChangeImage(selectedImagePath, backColor);
        }

        private void trackBar2_Scroll(object sender, EventArgs e)
        {
            ChangeImage(selectedImagePath, backColor);
        }

        private void trackBar3_Scroll(object sender, EventArgs e)
        {
            ChangeImage(selectedImagePath, backColor);
        }
    }

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 WinForms 中配置 OpenCvSharp,您可以按照以下步骤进行操作: 1. 首先,确保已经安装了 OpenCvSharp 库。您可以在 NuGet 包管理器中搜索并安装 "OpenCvSharp4"。 2. 在您的 WinForms 项目中,右键单击项目名称,然后选择 "管理 NuGet 包"。在 NuGet 包管理器中搜索并安装 "OpenCvSharp4"。 3. 确保您的项目引用了正确的命名空间。在您的代码文件的顶部添加以下引用语句: ```csharp using OpenCvSharp; ``` 4. 在您的 WinForms 窗体上添加一个 PictureBox 控件,用于显示图像。 5. 创建一个按钮或其他触发事件的控件,以加载和处理图像。 6. 在按钮的点击事件处理程序中,添加以下代码来加载和显示图像: ```csharp private void LoadAndDisplayImage() { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Image Files (*.png;*.jpg;*.jpeg;*.bmp)|*.png;*.jpg;*.jpeg;*.bmp"; if (openFileDialog.ShowDialog() == DialogResult.OK) { Mat image = new Mat(openFileDialog.FileName); pictureBox.Image = image.ToBitmap(); } } ``` 上述代码会打开一个文件对话框,允许用户选择图像文件。选择的图像会加载到一个 `Mat` 对象中,并将其转换为 `Bitmap` 格式以便在 PictureBox 控件中显示。 请注意,您可能还需要根据您的具体需求添加其他 OpenCvSharp 的图像处理代码。上述代码仅提供了一个简单的示例,用于加载和显示图像。 希望这可以帮助您在 WinForms 中配置 OpenCvSharp!如有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值