[C#]winform基于opencvsharp实现黑白图像上色

【算法简介】

技术有时会提高艺术,但有时也会破坏艺术。着色黑白电影是一个可以追溯到1902年的古老想法。几十年来,许多电影创作者反对将黑白电影着色的想法,并将其视为对艺术的破坏。但今天它被接受为艺术形式的增强。该技术本身已经从艰苦的手工着色转变为如今的自动化技术。如下图所示。

基于传统的计算机视觉方法以及发表了许多关于图像着色的论文。我最喜欢的一篇文章是名为Colorization using Optimization的论文。它使用了一些彩色涂鸦来指导解决着色的优化问题。论文见

如果算法不需要用户输入任何参数,这不是很酷的事情吗?在过去几年中,随着深度学习的发展,着色自动化取得了巨大的飞跃。在这篇文章中,我们将了解一个这样的着色深度学习模型。我们还共享OpenCV代码,以便在Python或C ++应用程序中使用经过训练的模型。

1 彩色图像着色

在ECCV 2016中,一篇名为Colorful Image Colorization的论文,提出了一个用于着色灰度图像的卷积神经网络。论文使用ImageNet训练集的130万像素训练网络,并公开了一个训练好的基于Caffe的模型。在这篇文章中,我们将首先定义着色问题,解释论文的架构细节,最后分享代码和一些有趣的结果。

论文原文:

1.1 定义着色问题

我们首先根据CIE Lab颜色空间定义颜色问题。与RGB颜色空间一样,它是3通道颜色空间,但与RGB颜色空间不同,颜色信息仅在a(绿红分量)和b(蓝黄分量)通道中编码。L(亮度)通道仅对亮度信息进行编码。

我们想要着色的灰度图像可以被认为是Lab颜色空间中图像的L通道,我们的目标是找到a和b分量。可以使用标准颜色空间变换将该Lab图像变换为RGB颜色图像。例如,在OpenCV中,这可以使用COLOR_BGR2Lab选项的cvtColor来实现。

为了简化计算,Lab颜色空间的ab空间进行312级量化,如图2所示。OpenCV会映射到0到312,由于这种量化我们只需找到0到312的数,而不是找到每个像素的a和b值。另一种思考问题的方法是我们已经有一个L通道,取值从0到255,我们需要找到一个取0到312之间值的ab通道。所以颜色预测任务现在是变成了多项分类问题,每个灰色像素有313个类可供选择。

1.2 CNN彩色化结构

Colorful Image Colorization这篇论文使用的CNN结构如下所示。类似与VGG网络,但是该CNN没有池化层或全连接层。

输入图像缩放为224×224,缩放后的灰度输入图像表示为X。当它通过上面显示的神经网络时,输出为:

[OpenCV实战]17 基于卷积神经网络的OpenCV图像着se_v8_04

[OpenCV实战]17 基于卷积神经网络的OpenCV图像着se_ide_05

的尺寸为H×W×Q,其中H=56和W=56是最后一个卷积层输出的高度和宽度。Q=313表示类别个数。对于每个H×W都有一个对应的值表示属于该类的概率。我们的目标是为每个概率分布

[OpenCV实战]17 基于卷积神经网络的OpenCV图像着se_ide_06

找到其对应的ab通道值。

【界面展示】

【效果展示】

 【部分实现代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;namespace FIRC
{public partial class Form1 : Form{Mat src = new Mat();ColorizeImager net=new ColorizeImager(Application.StartupPath+ "\\weights\\colorization_deploy_v2.prototxt", Application.StartupPath + "\\weights\\colorization_release_v2.caffemodel");public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.Filter = "图文件(*.*)|*.jpg;*.png;*.jpeg;*.bmp";openFileDialog.RestoreDirectory = true;openFileDialog.Multiselect = false;if (openFileDialog.ShowDialog() == DialogResult.OK){src = Cv2.ImRead(openFileDialog.FileName);pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(src);}}private void button2_Click(object sender, EventArgs e){if(pictureBox1.Image==null){return;}var resultMat = net.Inference(src);pictureBox2.Image= OpenCvSharp.Extensions.BitmapConverter.ToBitmap(resultMat); //Mat转Bitmap}private void Form1_Load(object sender, EventArgs e){}}
}

【测试环境】

vs2019

netframework4.7.2

opencvsharp4.8.0

【演示视频】

C#使用OpenCvSharp实现黑白老照片上色_哔哩哔哩_bilibili【测试环境】vs2019netframework4.7.2opencvsharp4.8.0更多信息参考博文:https://blog.csdn.net/FL1623863129/article/details/139772466, 视频播放量 1、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 未来自主研究中心, 作者简介 未来自主研究中心,相关视频:使用易语言调用opencv进行视频和摄像头每一帧处理,Perplexity AI可以将你的搜索到的答案一键生成博客、文章,用C#部署yolov8的tensorrt模型进行目标检测winform最快检测速度,使用C#的winform部署yolov8的onnx实例分割模型,将yolov5-6.2封装成一个类几行代码完成语义分割任务,基于yolov8+bytetrack实现目标追踪视频演示,使用C#部署openvino-yolov5s模型,使用C++部署yolov8的onnx和bytetrack实现目标追踪,C#使用纯OpenCvSharp部署yolov8-pose姿态识别,C++使用纯opencv部署yolov9的onnx模型icon-default.png?t=N7T8https://www.bilibili.com/video/BV1es421T7zK/

【C#源码下载】

https://download.csdn.net/download/FL1623863129/89450272

同时我也用python和C++都实现了使用这个算法进行图像上色

【C++源码下载】

https://download.csdn.net/download/FL1623863129/89449396

【python源码下载】

https://download.csdn.net/download/FL1623863129/89449322

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/31865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不同层级管理者的职责,你弄清了吗?

在企业这座金字塔中,不同层次的管理者各自扮演着不同的角色,承担着不同的职责。这些职责不仅难以互相替代,而且必须明确划分,以确保企业能够高效、有序地运转。如果职责出现交叉、替代或重叠,将会带来一系列问题&#…

PCB行业迈入数字化新时代,智能工厂引领未来制造

在传统的PCB生产过程中,人工操作、纸质记录、经验判断等方式占据了主导地位。然而,这种方式不仅效率低下,而且容易出现误差,导致产品质量不稳定。同时,随着市场竞争的加剧,客户对产品的交期、质量、成本等方…

一种快速高效的点云表面重建算法

文章目录 一、概述二、算法流程1. 获取数据点R的相邻点集2. 投影R和 C R C_R CR​至二维平面3. 按角度排序4. 根据可见度删除数据点(Pruning by Visibility)5. 根据角度删除数据点(Pruning by Angle Criterion)6. 三角化三、参考文献一、概述 贪婪投影算法(Greedy Projecti…

顺序存储和链式存储的区别,以及如何比较两个数组或两个链表的长度

顺序存储和链式存储是数据结构中两种基本的存储方式,它们在数据元素的表示和关系的表示上有显著的区别。以下是对这两种存储方式的具体解释和比较: 顺序存储 定义:顺序存储是将数据元素存放在地址连续的存储单元里,其数据间的逻…

自制HTML5游戏《开心消消乐》

1. 引言 游戏介绍 《开心消消乐》是一款基于HTML5技术开发的网页游戏,以其简单的操作方式、轻松的游戏体验和高度的互动性,迅速在社交平台上获得了广泛的关注和传播。玩家通过消除相同类型的元素来获得分数,游戏设计巧妙,易于上手…

力扣SQL50 项目员工 I ROUND AVG

Problem: 1075. 项目员工 I 👨‍🏫 参考题解 Code select project_id,ROUND(AVG(e.experience_years),2) as average_years FROMproject as p LEFT JOINemployee as e ONp.employee_id e.employee_id GROUP BYp.project_id;

P5713 【深基3.例5】洛谷团队系统

1. 题目链接 https://www.luogu.com.cn/problem/P5713 P5713 【深基3.例5】洛谷团队系统 2. 题目描述 题目描述:本地添加题目,一题要5分钟;在洛谷团队添加一题要3分钟,但是添加题目之前要花11分钟配置 输入:一个整数…

视觉与运动控制2

运动控制卡 原理 运动控制卡是基于总线的电机运动控制卡 优点 运动控制卡在专机系统的开发过程中,具有更大的灵活性和开放性。使得使用者能在短期内开发出功能强大的运动控制系统。 供应商 动控制卡公司有美国的GALIL、PAMAC,英国的翠欧&#xff0…

E2000 ThreadX 适配

Phytium-ThreadX-SDK v0.1.0 ReleaseNote 1. 介绍 本项目发布了Phytium系列CPU的Eclipse ThreadX源代码,参考例程以及配置构建工具,本项目基于 Eclipse ThreadX 6.4.1 开发 2. 硬件支持情况 芯片ThreadXThreadX SMPE2000D支持开发中E2000Q支持开发中…

SUSE linux 15的网络管理

1 手工配置网络 wicked提供了一种新的网络配置框架。自SUSE 12起,SUSE使用了新的网络管理工具wicked,这个是区别与其他常见发行版的。常见的发行版目前大多使用的是NetworkManager服务进行网络管理。 1.1 wicked网络配置 传统网络接口管理面临的挑战之…

Python 学习 第四册 第10章 系统(1)

---用教授的方式学习 目录 10.1 文件 10.1.2 用exists()检查文件是否存在 10.1.3 用isfile()检查是否为文件 10.1.4 用copy()复制文件 10.1.5 用rename()重命名文件 10.1.6 用link()或者symlink()创建链接 10.1.7 用chmod()修改权限 10.1.8 用chown()修改所有…

mysqladmin——MySQL Server管理程序(一)

mysqladmin 是一个命令行工具,用于执行简单的 MySQL 服务器管理任务,如检查服务器的状态、创建和删除数据库、重载权限等。 调用mysqladmin如下: mysqladmin [options] command [command-arg] [command [command-arg]] ... mysqladmin支持…

sdlan如何智能组网?

【天联】组网是一款异地组网内网穿透产品,由北京金万维科技有限公司自主研发,旨在解决不同地区电脑与电脑、设备与设备、电脑与设备之间的信息远程通信问题。【天联】的操作简单、跨平台应用、无网络要求以及独创的安全加速方案等特点,使得它…

什么是局域网IP?

局域网IP(Local Area Network IP)指的是在局域网内使用的IP地址。局域网是指在某个地理区域内,由一组相互连接的计算机组成的小型网络,常见于家庭、学校、办公室等场所。局域网IP可以用来实现内网穿透,即在复杂的网络环…

【性能优化】表分区实践最佳案例

背景 随着数字化建设的持续深入,企业的业务规模迎来了高速发展,其数据规模也呈现爆炸式增长,如果继续使用传统解决方案,将所有数据存储在一个表中,对数据的查询和维护效率将是一个巨大的挑战,在这个背景下…

MySQL数据备份操作步骤

常见的数据备份命令 备份命令备份速度恢复速度介绍功能适用场景lvm2快照快快一般、支持几乎热备、速度快一般中小型数据量的备份cp快快物理备份、灵活性低很弱少量数据备份xtrabackup较快较快实现innodb热备、对存储引擎有要求强大较大规模的备份mysqldump慢慢逻辑备份、适用所…

【React】AntD组件---极客园--01.项目前置准备

项目搭建 基于CRA创建项目 CRA是一个底层基于webpack快速创建React项目的脚手架工具 # 使用npx创建项目 npx create-react-app react-jike# 进入到项 cd react-jike# 启动项目 npm start调整项目目录结构 -src-apis 项目接口函数-assets 项目资源文件&…

制作WIFI二维码,实现一键扫描连接WIFI

在现代社会,Wi-Fi已成为我们日常生活中不可或缺的一部分。无论是在家庭、办公室还是公共场所,我们都希望能够快速方便地连接到Wi-Fi网络。下面小编就来和大家分享通过制作WIFI二维码,来实现一键扫描就可以连接WIFI的方法。连接WIFI不用在告诉…

课时162:脚本发布_大型脚本_锁文件

2.2.4 锁文件 学习目标 这一节,我们从 基础知识、简单实践、小结 三个方面来学习 基础知识 简介 需求:同一时间段内,只允许有一个用户来执行这个脚本如果脚本执行的时候,有人在执行,那么输出报错:脚本…

CSS中几种常用的清除浮动的方法

在CSS中,浮动元素(使用float属性的元素)会脱离正常的文档流,这有时会导致父元素无法正确包裹其浮动子元素,从而产生布局问题。为了解决这个问题,我们需要清除浮动。以下是几种常用的清除浮动的方法&#xf…