[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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024最新IDEA插件开发+发布全流程 SelectCamelWords[选中驼峰单词](idea源代码)

2024最新IDEA插件开发(发布)-SelectCamelWords[选中驼峰单词](idea源代码) 参考文档 Jetbrains Idea插件开发文档: https://plugins.jetbrains.com/docs/intellij/welcome.html代码地址:https://github.com/yangfeng…

超大场景的三维模型(3D)轻量化的主要技术方法

超大场景的三维模型(3D)轻量化的主要技术方法 超大场景的三维模型在虚拟现实、游戏开发和可视化应用等领域具有重要的价值和应用前景。然而,由于其庞大的数据量和复杂的几何结构,给数据存储、传输和渲染带来了挑战。为了提高超大场…

搭建PHP开发环境:Linux篇

目录 一、引言 二、环境准备 三、安装Web服务器(Apache) Ubuntu/Debian系统: CentOS/Red Hat系统: 四、安装PHP解释器 Ubuntu/Debian系统: CentOS/Red Hat系统: 五、配置Apache以支持PHP Ubuntu/…

Hive期末总结

hive的概念,谁开发的 Apache Hive 是一个Apache 软件基金会维护的开源项目 Facebook贡献 hive是一个基于hadoop的数据仓库工具(对数据汇总查询和分析的工具) hive执行原理 Hive通过给用户提供的一系列交互接口,接收到用户的指令…

【x264】整体框架汇总

【x264】整体框架汇总 1. x264整体框架图2. 思考 参考: x264源代码简单分析:概述 参数分析: 【x264】x264编码器参数配置 流程分析: 【x264】x264编码主流程简单分析 【x264】编码核心函数(x264_encoder_encode&…

创建型设计模式

1.设计模式是什么? 设计模式是指在软件开发过程中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案。 软件设计过程中,解决问题的固定套路。 慎用设计模式。 2.设计模式是怎么来的&…

数据库实战(一)(关系数据库设计)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀数据库 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 前言 练习题 题型一:判断关系…

“首秀”欧洲杯,海信冰箱欧洲市占率居国产品牌首位

随着欧洲杯的火热开赛,挑灯夜战、观看球赛的时刻已经来临。此时,你需要何物相伴?是打开冰箱,取出真空腌制的食材,亲手烹饪一场观赛盛宴?还是取出极致保鲜的荔枝、樱桃,一边观赛一边品味&#xf…

如何避免接口重复请求(axios推荐使用AbortController)

前言: 我们日常开发中,经常会遇到点击一个按钮或者进行搜索时,请求接口的需求。 如果我们不做优化,连续点击按钮或者进行搜索,接口会重复请求。 以axios为例,我们一般以以下几种方法为主: 1…

【文献阅读】Partially Adaptive Array Techniques

Abstract 文章研究了在多窄带干扰环境下,辅助阵元的选择,为部分自适应天线阵,以达到性能优化的目的。推导了双干扰问题的显式解。这个案例足以说明多个干扰的相互作用,同时也为更复杂的问题提供了一定程度的理解。本文还提出并讨…

如何实现ElementUI动态表头?

可能看到这个标题,有些小伙伴会有些疑惑,动态表头是个什么东西,怎么没听说过? 其实动态表头在企业的项目中用途还是非常广泛的,比如erp系统什么的 那么动态表头是什么呢?说简单点就是让ElementUI的Table表格可以实现自定义表头展示+表头拖拽排序的一个功能 这个东西我…

本地运行大语言模型(LLMs)

用例 像PrivateGPT、llama.cpp、Ollama、GPT4All、llamafile 等项目的流行度凸显了本地(在您自己的设备上)运行大型语言模型(LLMs)的需求。 这至少有两个重要的好处: 1.隐私:您的数据不会发送给第三方&a…

Mars3d实现汽车尾气粒子效果从汽车屁股开始发射效果

本身的汽车尾气粒子效果:在汽车模型的中间发射的↓↓↓↓↓↓↓↓↓↓↓ Mars3d实例中是使用transY偏移值实现汽车尾气粒子效果从汽车屁股开始发射效果: // 动态运行车辆的尾气粒子效果 function addDemoGraphic4(graphicLayer) {const fixedRoute new…

【odoo】如何开启开发者模式,开启有什么作用?

概要 在 Odoo 中,开发者模式(Developer Mode)是一种专门为开发和调试提供的模式。启用开发者模式可以让开发人员访问到更多的功能和信息,从而更方便地进行模块开发、调试和测试。 启用方式(主要两种) 1.设…

windows实现python串口编程

一、windows安装python Welcome to Python.org 根据windows是64位找到对应的版本下载 下载完后直接安装即可! 打开cmd查看python版本 $ python --version #查看版本 二、串口编程 1、安装pyserial库 pyserial是Python中的一个库,用于处理串口通信。 cmd…

DDP算法之线性化和二次近似(Linearization and Quadratic Approximation)

DDP算法线性化和二次近似 在DDP算法中,第三步是线性化系统动力学方程和二次近似代价函数。这一步是关键,它使得DDP能够递归地处理非线性最优控制问题。通过线性化和二次近似,我们将复杂的非线性问题转换为一系列简单的线性二次问题,逐步逼近最优解。通过这些线性化和二次近…

如何解决 NumPy 无法计算其中一个 5 元素列表的标准差的问题

问题背景 在使用 NumPy 计算统计结果时发现,NumPy 能够接受原始数据列表来计算标准差,却无法接受经过计算后的结果列表。尝试将 std(f10) 替换为 std(solf10),但引发了错误:AttributeError: Float object has no attribute sqrt。…

vue页面前端初始化表格数据时报错TypeError: data.reduce is not a function

这是初始化表格数据时报的错 。 [Vue warn]: Invalid prop: type check failed for prop "data". Expected Array, got Object found in---> <ElTable> at packages/table/src/table.vue<List> at src/views/org/List.vue<Catalogue> at src/v…

Java毕业设计 基于SSM助学贷款管理系统

Java毕业设计 基于SSM助学贷款管理系统 SSM 助学贷款管理系统 功能介绍 学生&#xff1a;登录 修改密码 学生信息 贷款项目信息 申请贷款 留言信息 公告 学校负责人&#xff1a;登录 修改密码 学生管理 学校负责人信息 贷款项目 贷款申请审批 留言信息 公告 银行负责人&…

媒体邀约人物访谈,如何有效提升品牌影响力?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 品牌选择媒体邀约人物专访的形式来背书&#xff0c;可以带来以下好处&#xff1a; 增强品牌权威性&#xff1a;通过知名媒体的专访&#xff0c;品牌可以借助媒体的权威性来提升自身的信誉…