C# OpenCvSharp DNN 黑白老照片上色

C# OpenCvSharp DNN 黑白老照片上色

目录

效果

项目

代码

下载 

参考


效果

项目

代码

using OpenCvSharp;
using OpenCvSharp.Extensions;
using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace OpenCvSharp_Demo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";
        string startupPath;
        string image_path;

        Stopwatch stopwatch = new Stopwatch();

        Mat image;
        Mat result_image;

        /*
         // 初始化
        extern "C" _declspec(dllexport) void* __cdecl init(char* prototxt, char* caffe_model,int* res);

        // 上色
        extern "C" _declspec(dllexport) int __cdecl colorization(void* CvDNN_Net,Mat* image, Mat** returnValue);
         
         */

        const string DllName = "ColorizationSharp.dll";

        [DllImport(DllName, EntryPoint = "init", CallingConvention = CallingConvention.Cdecl)]
        public extern static IntPtr init(string prototxt, string caffe_model, ref int res);

        [DllImport(DllName, EntryPoint = "colorization", CallingConvention = CallingConvention.Cdecl)]
        public extern static int colorization(IntPtr CvDNN_Net, IntPtr image, out IntPtr returnValue);

        IntPtr CvDNN_Net;

        private void Form1_Load(object sender, EventArgs e)
        {
            startupPath = System.Windows.Forms.Application.StartupPath;

            image_path = "images/1.jpg";
            pictureBox1.Image = new Bitmap(image_path);
            image = new Mat(image_path);

            string prototxt = startupPath + "\\model\\colorization_deploy_v2.prototxt";
            string caffe_model = startupPath + "\\model\\colorization_release_v2.caffemodel";
            int res = 0;
            CvDNN_Net = init(prototxt, caffe_model, ref res);
            if (res != 0)
            {
                MessageBox.Show("初始化失败!");
            }
            else
            {
                button2.Enabled = true;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = fileFilter;
            if (ofd.ShowDialog() != DialogResult.OK) return;

            pictureBox1.Image = null;
            pictureBox2.Image = null;
            textBox1.Text = "";

            image_path = ofd.FileName;
            pictureBox1.Image = new Bitmap(image_path);
            image = new Mat(image_path);

        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (image_path == "")
            {
                return;
            }

            textBox1.Text = "";
            pictureBox2.Image = null;
            button2.Enabled = false;

            Application.DoEvents();

            stopwatch.Restart();

            IntPtr returnValue = IntPtr.Zero;
            int res = colorization(CvDNN_Net, image.Clone().CvPtr, out returnValue);
            if (res == 0)
            {
                result_image = new Mat(returnValue);

                double costTime = stopwatch.Elapsed.TotalMilliseconds;

                textBox1.Text = $"耗时:{costTime:F2}ms";
                pictureBox2.Image = result_image.ToBitmap();
            }
            else
            {
                MessageBox.Show("代码异常,上色失败!");
            }
            button2.Enabled = true;

        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (pictureBox2.Image == null)
            {
                return;
            }
            Bitmap output = new Bitmap(pictureBox2.Image);
            var sdf = new SaveFileDialog();
            sdf.Title = "保存";
            sdf.Filter = "Images (*.jpg)|*.jpg|Images (*.png)|*.png|Images (*.bmp)|*.bmp|Images (*.emf)|*.emf|Images (*.exif)|*.exif|Images (*.gif)|*.gif|Images (*.ico)|*.ico|Images (*.tiff)|*.tiff|Images (*.wmf)|*.wmf";
            if (sdf.ShowDialog() == DialogResult.OK)
            {
                switch (sdf.FilterIndex)
                {
                    case 1:
                        {
                            output.Save(sdf.FileName, ImageFormat.Jpeg);
                            break;
                        }
                    case 2:
                        {
                            output.Save(sdf.FileName, ImageFormat.Png);
                            break;
                        }
                    case 3:
                        {
                            output.Save(sdf.FileName, ImageFormat.Bmp);
                            break;
                        }
                    case 4:
                        {
                            output.Save(sdf.FileName, ImageFormat.Emf);
                            break;
                        }
                    case 5:
                        {
                            output.Save(sdf.FileName, ImageFormat.Exif);
                            break;
                        }
                    case 6:
                        {
                            output.Save(sdf.FileName, ImageFormat.Gif);
                            break;
                        }
                    case 7:
                        {
                            output.Save(sdf.FileName, ImageFormat.Icon);
                            break;
                        }
                    case 8:
                        {
                            output.Save(sdf.FileName, ImageFormat.Tiff);
                            break;
                        }
                    case 9:
                        {
                            output.Save(sdf.FileName, ImageFormat.Wmf);
                            break;
                        }
                }
                MessageBox.Show("保存成功,位置:" + sdf.FileName);
            }
        }

    }
}

using OpenCvSharp;
using OpenCvSharp.Extensions;
using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.Windows.Forms;namespace OpenCvSharp_Demo
{public partial class Form1 : Form{public Form1(){InitializeComponent();}string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";string startupPath;string image_path;Stopwatch stopwatch = new Stopwatch();Mat image;Mat result_image;/*// 初始化extern "C" _declspec(dllexport) void* __cdecl init(char* prototxt, char* caffe_model,int* res);// 上色extern "C" _declspec(dllexport) int __cdecl colorization(void* CvDNN_Net,Mat* image, Mat** returnValue);*/const string DllName = "ColorizationSharp.dll";[DllImport(DllName, EntryPoint = "init", CallingConvention = CallingConvention.Cdecl)]public extern static IntPtr init(string prototxt, string caffe_model, ref int res);[DllImport(DllName, EntryPoint = "colorization", CallingConvention = CallingConvention.Cdecl)]public extern static int colorization(IntPtr CvDNN_Net, IntPtr image, out IntPtr returnValue);IntPtr CvDNN_Net;private void Form1_Load(object sender, EventArgs e){startupPath = System.Windows.Forms.Application.StartupPath;image_path = "images/1.jpg";pictureBox1.Image = new Bitmap(image_path);image = new Mat(image_path);string prototxt = startupPath + "\\model\\colorization_deploy_v2.prototxt";string caffe_model = startupPath + "\\model\\colorization_release_v2.caffemodel";int res = 0;CvDNN_Net = init(prototxt, caffe_model, ref res);if (res != 0){MessageBox.Show("初始化失败!");}else{button2.Enabled = true;}}private void button1_Click(object sender, EventArgs e){OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = fileFilter;if (ofd.ShowDialog() != DialogResult.OK) return;pictureBox1.Image = null;pictureBox2.Image = null;textBox1.Text = "";image_path = ofd.FileName;pictureBox1.Image = new Bitmap(image_path);image = new Mat(image_path);}private void button2_Click(object sender, EventArgs e){if (image_path == ""){return;}textBox1.Text = "";pictureBox2.Image = null;button2.Enabled = false;Application.DoEvents();stopwatch.Restart();IntPtr returnValue = IntPtr.Zero;int res = colorization(CvDNN_Net, image.Clone().CvPtr, out returnValue);if (res == 0){result_image = new Mat(returnValue);double costTime = stopwatch.Elapsed.TotalMilliseconds;textBox1.Text = $"耗时:{costTime:F2}ms";pictureBox2.Image = result_image.ToBitmap();}else{MessageBox.Show("代码异常,上色失败!");}button2.Enabled = true;}private void button3_Click(object sender, EventArgs e){if (pictureBox2.Image == null){return;}Bitmap output = new Bitmap(pictureBox2.Image);var sdf = new SaveFileDialog();sdf.Title = "保存";sdf.Filter = "Images (*.jpg)|*.jpg|Images (*.png)|*.png|Images (*.bmp)|*.bmp|Images (*.emf)|*.emf|Images (*.exif)|*.exif|Images (*.gif)|*.gif|Images (*.ico)|*.ico|Images (*.tiff)|*.tiff|Images (*.wmf)|*.wmf";if (sdf.ShowDialog() == DialogResult.OK){switch (sdf.FilterIndex){case 1:{output.Save(sdf.FileName, ImageFormat.Jpeg);break;}case 2:{output.Save(sdf.FileName, ImageFormat.Png);break;}case 3:{output.Save(sdf.FileName, ImageFormat.Bmp);break;}case 4:{output.Save(sdf.FileName, ImageFormat.Emf);break;}case 5:{output.Save(sdf.FileName, ImageFormat.Exif);break;}case 6:{output.Save(sdf.FileName, ImageFormat.Gif);break;}case 7:{output.Save(sdf.FileName, ImageFormat.Icon);break;}case 8:{output.Save(sdf.FileName, ImageFormat.Tiff);break;}case 9:{output.Save(sdf.FileName, ImageFormat.Wmf);break;}}MessageBox.Show("保存成功,位置:" + sdf.FileName);}}}
}

下载 

源码下载

参考

https://github.com/richzhang/colorization/tree/caffe

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

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

相关文章

Kali Linux 安装 + 获取 root 权限 + 远程访问!保姆级教程!

kali是linux其中一个发行版,基于Debian,前身是BackTrack(简称BT系统)。kali系统内置大量渗透测试软件,可以说是巨大的渗透系统,涵盖了多个领域,如无线网络、数字取证、服务器、密码、系统漏洞等…

Context Pattern上下文模式

使用情景 全局使用的配置,数据库的连接。MVC中的跨层数据传输携带请求ID,用户信息等用户权限信息线程上下文 跨层数据共享 统一调用参数 携带多个事务需要处理的对象 携带用户信息 使用ThreadLocal

C#中json数据序列化和反序列化的最简单方法(C#对象和字符串的相互转换)

文章目录 将C#对象转换为json字符串Newtonsoft模块的安装用Newtonsoft将对象转换为json字符串 将json字符串转换为C#对象 将C#对象转换为json字符串 本介绍将基于C#中的第三方库Newtonsoft进行,因此将分为Newtonsoft模块的安装和使用两部分。该模块的优势在于只需要…

pyqt QComboBox下拉列表框控件

pyqt QComboBox下拉列表框控件 QComboBox效果代码 QComboBox QComboBox 是 PyQt(中的一个控件,它允许用户从下拉列表中选择一个选项。这个控件在需要用户从预定义选项中进行选择时非常有用。 效果 代码 import sys from PyQt5.QtWidgets import QAppl…

C#之如何判断数据类型

一、GetType方法 a.GetType():获取当前变量的类型对象 string str "Hello World";Console.WriteLine(str.GetType()); 结果: 二、typeof方法 typeof(Int):获取的是Int类型的类型对象 int num 10;Console.WriteLine(num.GetType() typeof(i…

一篇文章告诉你:通信网优比计算机岗位好在哪?

据优橙2023年就业人员专业分布统计,通信专业学员占比32.7%,非通信专业学员占比64.8%,其他占比2.5%。 可见从事网优的学员中大部分为非通信专业。而非通信专业中72%的学生在学习通信网优还是计算机专业中,选择了通信网优。 为什么越…

SpringBoot自动装配(二)

近日,余溺于先贤古哲之文无法自拔。虽未明其中真意,但总觉有理。遂抄录一篇以供诸君品鉴——公孙鞅曰:“臣闻之:‘疑行无名,疑事无功。’君亟定变法之虑,殆无顾天下之议之也。且夫有高人之行者,…

基于springboot+vue+Mysql的在线BLOG网

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

创意无限!AI一键生成漫画视频,每天轻松收入300+,粘贴复制简单操作!

AI项目算是2023到2024一直都非常火爆的项目,这次的AI漫画项目也是相当暴利的项目了,我知道一个老铁通过AI漫画半年已经获利100W了,真的是相当暴利了。 不再多说,直接上手拆解项目。 项目获取: https://zzmbk.com/htt…

MacApp自动化测试之Automator初体验

今天我们继续讲Automator的使用。 初体验 启动Automator程序,选择【工作流程】类型。从资源库区域依次将获取指定的URL、从网页中获得文本、新建文本文件三个操作拖进工作流创建区域。 然后修改内容,将获取指定的URL操作中的URL替换成https://www.cnb…

Spring_概述

Spring 官网Spring Framework(Spring)文档位置重点内容Overview 官网 Spring官网 首页更新:动画显示Spring makes Java simple, modern, productive, reactive Spring Framework(Spring) 文档位置 重点 IoC容器AOP&…

ubuntu编译pcl时报错

报错如下 cc1plus: warning: -Wabi wont warn about anything [-Wabi] cc1plus: note: -Wabi warns about differences from the most up-to-date ABI, which is also used by default cc1plus: note: use e.g. -Wabi11 to warn about changes from GCC 7 在网上找到了一封邮件…