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

C# OpenCvSharp 去水印 图像修复

效果

项目

VS2022+.net4.8+OpenCvSharp4

代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
using OpenCvSharp;
using OpenCvSharp.Extensions;namespace OpenCvSharp_去水印_图像修复
{public partial class Form1 : Form{public Form1(){InitializeComponent();}Bitmap bmp;string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";string imgPath = "";public Mat img, img0, inpainted, inpaintMask;int thickness = 10;string CommandText;InpaintMethod inpaintMethod;ListItem li;private void Form1_Load(object sender, EventArgs e){this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);this.UpdateStyles();//添加项:cBoxThresholdTypes.Items.Add(new ListItem("NS", InpaintMethod.NS));cBoxThresholdTypes.Items.Add(new ListItem("Telea", InpaintMethod.Telea));//设置选中项:cBoxThresholdTypes.SelectedIndex = 0;    //根据索引}private void trackBar2_Scroll(object sender, EventArgs e){thickness = trackBar2.Value;}private void button1_Click(object sender, EventArgs e){OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = fileFilter;if (ofd.ShowDialog() != DialogResult.OK) return;imgPath = ofd.FileName;bmp = new Bitmap(imgPath);pictureBox1.Image = bmp;img0 = Cv2.ImRead(imgPath);inpaintMask = new Mat(img0.Size(), MatType.CV_8U, Scalar.Black);pictureBox2.Image = BitmapConverter.ToBitmap(inpaintMask);pictureBox3.Image = null;}private void cBoxThresholdTypes_SelectedIndexChanged(object sender, EventArgs e){Inpaint();}private void trackBar1_Scroll(object sender, EventArgs e){Inpaint();}private void button4_Click(object sender, EventArgs e){if (pictureBox1.Image == null){return;}img = img0.Clone();inpaintMask = new Mat(img0.Size(), MatType.CV_8U, Scalar.Black);inpainted = img0.EmptyClone();Window wImage = new Window("image", img);OpenCvSharp.Point prevPt = new OpenCvSharp.Point(-1, -1);wImage.SetMouseCallback((MouseEventTypes ev, int x, int y, MouseEventFlags flags, IntPtr userdata) =>{if (ev == MouseEventTypes.LButtonUp || (flags & MouseEventFlags.LButton) == 0){prevPt = new OpenCvSharp.Point(-1, -1);}else if (ev == MouseEventTypes.LButtonDown){prevPt = new OpenCvSharp.Point(x, y);}else if (ev == MouseEventTypes.MouseMove && (flags & MouseEventFlags.LButton) != 0){OpenCvSharp.Point pt = new OpenCvSharp.Point(x, y);if (prevPt.X < 0){prevPt = pt;}inpaintMask.Line(prevPt, pt, Scalar.White, thickness, LineTypes.AntiAlias, 0);pictureBox2.Image = BitmapConverter.ToBitmap(inpaintMask);img.Line(prevPt, pt, Scalar.White, thickness, LineTypes.AntiAlias, 0);prevPt = pt;wImage.ShowImage(img);}});try{for (; ; ){switch ((char)Window.WaitKey(0)){case (char)27:    // exitreturn;case 'r':inpaintMask.SetTo(Scalar.Black);pictureBox2.Image = BitmapConverter.ToBitmap(inpaintMask);img0.CopyTo(img);wImage.ShowImage(img);break;case 'i':case '\r':Inpaint();break;}}}finally{Window.DestroyAllWindows();}}private void button3_Click(object sender, EventArgs e){Inpaint();}void Inpaint(){if (pictureBox1.Image == null){return;}li = (ListItem)cBoxThresholdTypes.SelectedItem;inpaintMethod = (InpaintMethod)li.Value;Cv2.Inpaint(img, inpaintMask, inpainted, trackBar1.Value, inpaintMethod);pictureBox3.Image = BitmapConverter.ToBitmap(inpainted);CommandText = String.Format("Cv2.Inpaint(src, mask, dst,{0},{1})", trackBar1.Value, inpaintMethod.ToString());txtCommandText.Text = CommandText;}}
}

Demo下载 

相关文章:

C# OpenCvSharp 去水印 图像修复

效果 项目 VS2022.net4.8OpenCvSharp4 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; usi…...

考研算法第40天:众数 【模拟,简单题】

题目 本题收获 又是一道比较简单的模拟题&#xff0c;就不说解题思路了&#xff0c;说一下中间遇到的问题吧&#xff0c;就是说cin输入它是碰到空格就停止输入的&#xff0c;详细的看下面这篇博客对于cin提取输入流遇到空格的问题_while(cin) 空格_就是那个党伟的博客-CSDN博…...

MySQL:内置函数、复合查询和内外连接

内置函数 select 函数; 日期函数 字符串函数 数学函数 其它函数 复合查询&#xff08;多表查询&#xff09; 实际开发中往往数据来自不同的表&#xff0c;所以需要多表查询。本节我们用一个简单的公司管理系统&#xff0c;有三张 表EMP,DEPT,SALGRADE来演示如何进行多表查询…...

【HTML】label 标签

在HTML中&#xff0c;<label> 标签用于为表单元素创建标签文本或标题。它可以与输入字段&#xff08;如文本框、单选按钮、复选框等&#xff09;和其他表单元素关联起来&#xff0c;以提高可用性和可访问性。 <label> 元素有两种常见的用法&#xff1a; 包裹方式…...

python视频流截图(按帧数)

一、安装opencv计算机视觉库 pip install opencv-python二、视频流截图 1、读取视频文件&#xff0c;获取视频帧数 import cv2 # 视频位置 video_path path_file_name # 读取视频 cap cv2.VideoCapture(video_path) # 获取视频总帧数 frame_count cap.get(cv2.CAP_PROP_F…...

MongoDB SQL

Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>cd C:\MongoDB\Server\3.4\binC:\MongoDB\Server\3.4\bin> C:\MongoDB\Server\3.4\bin> C:\MongoDB\Server\3.4\bin>net start MongoDB 请求的…...

node js连接mysql数据库

首先&#xff0c;确保你已经安装了 mysql2 模块。如果没有安装&#xff0c;可以使用以下命令进行安装&#xff1a; npm install mysql2创建一个 Node.js 脚本&#xff0c;例如 connectToMysql.js&#xff0c;并使用以下代码&#xff1a; const mysql require(mysql2);// 创建…...

通过Python模拟计算附近WIFI密码,没有我蹭不到的网

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 今天来分享一下如何通过 Python 脚本实现 WIFI 密码的自动猜解 无图形界面 先来看看怎么实现没有图形界面版的自动猜解。 WIFI猜解 导入模块 import pywifi from pywifi import const import time import datetime测试连…...

ubuntu20.04 远程桌面配置记录【亲测好用】

简介 ubuntu系统下有好几种不同方式的远程桌面方式&#xff0c;本人都使用过&#xff0c;以下是一些使用总结&#xff1a; vnc4server&#xff1a;其中vnc4server对gnome桌面支持不好 vino&#xff1a;系统自带&#xff0c;但需要用户登录一次后才能远程&#xff0c;并且需要安…...

解决selenium的“can‘t access dead object”错误

目录 问题描述 原因 解决方法 示例代码 资料获取方法 问题描述 在python执行过程中&#xff0c;提示selenium.common.exceptions.WebDriverException: Message: TypeError: cant access dead object 原因 原因是代码中用到了frame,获取元素前需要切换到frame才能定位到…...

Docker Dockerfile 使用方法

目录 Dockerfile 介绍 Dockerfile 示例 Dockerfile 介绍 当使用Docker构建容器化应用程序时&#xff0c;Dockerfile是一个用于定义容器镜像的文本文件。它包含了一系列指令&#xff0c;告诉Docker如何从基础镜像&#xff08;通常是官方或自定义的操作系统镜像&#xff09;构…...

(6)(6.3) 复合连接的故障处理

文章目录 6.3 复合连接的故障处理 6.4 相关话题 6.3 复合连接的故障处理 带有 F7 或 H7 处理器并有 CAN 接口的自动驾驶仪使用的固件提供两个 USB 接口。一个用于正常的 MAVLink 连接&#xff0c;一个用于 SLCAN 串行连接到 CAN 接口进行配置和固件更新。这被称为复合型 USB…...

报考红帽认证难不,红帽认证考试容易吗?

红帽认证是由红帽Linux公司推出的&#xff0c;红帽培训和测试非常注重培养实际的动手实战能力&#xff0c;主要包括RHCSA认证、RHCE认证和RHCA认证&#xff0c;每个等级的认证都是层层递进的。 要想参加RHCA认证就必须通过RHCE认证&#xff0c;且认证证书在有效期内方可参加。 …...

如何优雅地用VS编写C#代码——快捷键的使用

F4&#xff1a;打开属性面板 F5&#xff1a;调试 CtrlF5&#xff1a;直接执行&#xff0c;不挑食 F9&#xff1a;设置、切换断点 F10&#xff1a;逐过程 F11&#xff1a;逐语句 F12&#xff1a;转到定义 AltF12&#xff1a;查看定义 CtrlF&#xff1a;查找 CtrlKCtrlK&…...

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序)

索引库操作 mapping属性 mapping是对文档的约束&#xff0c;常见约束属性包括: 创建索引库 #创建索引库 PUT /heima {"mappings": {"properties": {"info":{"type": "text","analyzer": "ik_smart"},…...

【性能测试】性能数据采集工具nmon安装使用及报告参数含义详解

目录 nmon nmon下载 解压安装 启动 数据采集配置 生成图形结果 nmon报告中的参数含义 资料获取方法 nmon nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具&#xff0c;它能在系统运行过程中实时地捕捉系统资源的使用情况&#xff0c;并且能输出结果到文…...

『PostgreSQL』在 PostgreSQL中创建只读权限和读写权限的账号

&#x1f4e3;读完这篇文章里你能收获到 理解在 PostgreSQL 数据库中创建账号的重要性以及如何进行账号管理掌握在 PostgreSQL 中创建具有只读权限和读写权限的账号的步骤和方法学会使用 SQL 命令来创建账号、为账号分配适当的权限以及控制账号对数据库的访问级别了解如何确保…...

基于Java+SpringBoot+Vue的网上书城管理系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…...

安全渗透——AWK知识整理

1.awk的定义 awk是一种编程语言&#xff0c;用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件&#xff0c;或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能&#xff0c;是linux/unix下的一个强大编程工具。它在命令行…...

计算机视觉的应用9-视觉领域中的61个经典数据集【大集合】的应用与实战

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用9-视觉领域中的61个经典数据集【大集合】的应用与实战,我们都知道计算机视觉是一门研究如何使计算机能够理解和解释数字图像或视频的技术和方法。在计算机视觉领域中,数据集是非常重要的资源,它们可以用于训练和评估…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...