天天看點

C#實戰:圖像清晰度增強介紹和案例實踐

作者:IT技術分享社群
C#實戰:圖像清晰度增強介紹和案例實踐

一、圖像清晰度增強介紹

C#實戰:圖像清晰度增強介紹和案例實踐

基于騰訊雲深度學習等人工智能技術,消除圖檔因有損壓縮導緻的噪聲,改善因使用濾鏡、拍攝失焦等導緻的圖像模糊問題,讓圖檔的邊緣和細節更加清晰自然。

二、開發流程

首先登入騰訊雲平台開通圖檔處理服務 官網:https://cloud.tencent.com/product/imageprocess

申請開發密鑰

下載下傳程式設計語言對應的SDK

開發工具建立項目

引用騰訊圖像處理庫

根據業務編寫代碼

三、請求參數說明

● Region:資源地域,必填,表示操作的資源所屬的地域,比如 ap-shanghai ap-beijing ap-shenzhen 等。

C#實戰:圖像清晰度增強介紹和案例實踐

● ImageUrl:圖檔URL位址參數。圖檔格式:PNG、JPG、JPEG。 圖檔大小:所下載下傳圖檔經Base64編碼後不超過4M。圖檔下載下傳時間不超過3秒。

● ImageBase64:支援PNG、JPG、JPEG、BMP,不支援 GIF 圖檔。圖檔經過Base64編碼的内容。最大不超過4M。與ImageUrl同時存在時優先使用ImageUrl字段。注意:圖檔需要Base64編碼,并且要去掉編碼頭部。

四、輸出參數說明

● EnhancedImage:增強後圖檔的base64編碼。示例值:/9j/4AAQSkZJRgABAQAAAQABA…

● RequestId:唯一請求 ID,每次請求都會傳回。排查異常問題時需要提供該次請求的 RequestId。

五、開發實踐

這裡采用SDK+C#語言的方式寫一個WinForm程式。具體操作如下:

首先建立一個WinForm控制台程式EnhanceImageDemo,架構選擇NetFramework4.5.2。

C#實戰:圖像清晰度增強介紹和案例實踐

5.1 安裝依賴庫TencentCloudSDK.Tiia

通過指令行

dotnet add package TencentCloudSDK.Tiia
           

通過Nuget 包管理器方式安裝

打開nuget包管理器,搜尋 TencentCloudSDK.Tiia,安裝最新穩定版本 3.0.957。

C#實戰:圖像清晰度增強介紹和案例實踐

5.2 增加騰訊API調用配置項

直接在app.config 檔案添加,完整的内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
		<appSettings>
			<!--SecretId-->
			<add key="SecretId" value="xxxxxx"/>
			<!--SecretKey-->
			<add key="SecretKey" value="xxxxxx"/>
			<!--地區選擇ap-shanghai ap-beijing ap-shenzhen 等-->
			<add key="Region" value="ap-shanghai"/>
			<!--圖檔輸出目錄-->
			<add key="OutPath" value="D:\Image\"/>
</appSettings>
</configuration>
           

注意:開發密鑰需要開發者自己申請填入配置檔案。

C#實戰:圖像清晰度增強介紹和案例實踐

5.3 代碼

主要實作了網絡圖檔URL調用圖像增強處理方法生成Base64字元串,然後轉換為png圖檔,并直接調用作業系統預設的打開圖檔工具直接打開圖檔。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using TencentCloud.Common;
using TencentCloud.Common.Profile;
using TencentCloud.Tiia.V20190529;
using TencentCloud.Tiia.V20190529.Models;
using System.Configuration;
namespace EnhanceImageDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 圖檔增強方法
        /// </summary>
        private void EnhanceImage()
        {
            string url = textBox1.Text.Trim();
            if (!Uri.IsWellFormedUriString(url, UriKind.Absolute))
            {
                MessageBox.Show("請輸入正确的圖檔URL");
            }
            else
            {
                // 調用騰訊雲接口的參數說明
                string secretId = ConfigurationManager.AppSettings["SecretId"];
                string secretKey = ConfigurationManager.AppSettings["SecretKey"];
                string region = ConfigurationManager.AppSettings["Region"];
                try
                {
                    // 執行個體化一個認證對象,入參需要傳入騰訊雲賬戶 SecretId 和 SecretKey,需注意密鑰對的保密             
                    // 密鑰可前往官網控制台 https://console.cloud.tencent.com/cam/capi 進行擷取
                    Credential cred = new Credential
                    {
                        SecretId = secretId,
                        SecretKey = secretKey
                    };
                    // 執行個體化一個client選項,可選的,沒有特殊需求可以跳過
                    ClientProfile clientProfile = new ClientProfile();
                    // 執行個體化一個http選項,可選的,沒有特殊需求可以跳過
                    HttpProfile httpProfile = new HttpProfile();
                    httpProfile.Endpoint = ("tiia.tencentcloudapi.com");
                    clientProfile.HttpProfile = httpProfile;

                    // 執行個體化要請求産品的client對象,clientProfile是可選的
                    TiiaClient client = new TiiaClient(cred, region, clientProfile);
                    // 執行個體化一個請求對象,每個接口都會對應一個request對象 傳遞參數,支援網絡圖檔和圖檔經過Base64編碼的内容
                    EnhanceImageRequest req = new EnhanceImageRequest();
                    //圖檔URL位址參數。圖檔格式:PNG、JPG、JPEG。 圖檔大小:所下載下傳圖檔經Base64編碼後不超過4M。圖檔下載下傳時間不超過3秒。
                    req.ImageUrl = url;
                    //ImageBase64 參數 支援PNG、JPG、JPEG、BMP,不支援 GIF 圖檔。圖檔經過Base64編碼的内容。最大不超過4M。與ImageUrl同時存在時優先使用ImageUrl字段。注意:圖檔需要Base64編碼,并且要去掉編碼頭部。
                    req.ImageBase64 = "無";
                    // 傳回的resp是一個EnhanceImageResponse的執行個體,與請求對象對應
                    EnhanceImageResponse resp = client.EnhanceImageSync(req);
                     convertToImage(resp.EnhancedImage);             
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());
                }
            }
        }

        /// <summary>
        /// base64字元串轉換為png
        /// </summary>
        /// <param name="base64String"></param>
        private void convertToImage(string base64String)        
        {
            // 把Base64 字元串解碼為位元組數組
            byte[] imageBytes = Convert.FromBase64String(base64String);
            // 配置檔案圖檔圖檔輸出目錄
            string path = ConfigurationManager.AppSettings["OutPath"];
            string fileName = path + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png";
            // 将位元組數組儲存為圖檔檔案
            using (MemoryStream ms = new MemoryStream(imageBytes))
            {
                Image image = Image.FromStream(ms);
                // 儲存圖檔
                image.Save(fileName, System.Drawing.Imaging.ImageFormat.Png);
                // 調用系統預設程式打開圖檔檔案
                Process.Start(fileName);
            }
        }
        /// <summary>
        /// 按鈕點選事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOk_Click(object sender, EventArgs e)
        {
            EnhanceImage();
        }
    }
}

           

5.4 運作效果

檢視調用接口成功的調試資料

C#實戰:圖像清晰度增強介紹和案例實踐

頁面運作窗體,主要是圖檔網絡位址輸入和轉換按鈕

C#實戰:圖像清晰度增強介紹和案例實踐

轉換之後成功的效果如下圖:

C#實戰:圖像清晰度增強介紹和案例實踐