国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C# OpenCVSharp圖像入門(mén)_給綠幕圖片視頻加背景

這篇具有很好參考價(jià)值的文章主要介紹了C# OpenCVSharp圖像入門(mén)_給綠幕圖片視頻加背景。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

  OpenCV的全稱是Open Source Computer Vision Library,是一個(gè)跨平臺(tái)的計(jì)算機(jī)視覺(jué)庫(kù)。OpenCV是由英特爾公司發(fā)起并參與開(kāi)發(fā),以BSD許可證授權(quán)發(fā)行,可以在商業(yè)和研究領(lǐng)域中免費(fèi)使用。OpenCV可用于開(kāi)發(fā)實(shí)時(shí)的圖像處理計(jì)算機(jī)視覺(jué)以及模式識(shí)別程序。該程序庫(kù)也可以使用英特爾公司的IPP進(jìn)行加速處理。

  OpenCVSharp是一個(gè).Net平臺(tái)使用的OpenCV封裝庫(kù)?,F(xiàn)在網(wǎng)上關(guān)于openCV的教程基本都是c++和python,如果是C#方向,可以跟著這兩個(gè)語(yǔ)言的步驟自己寫(xiě)demo。

  開(kāi)始我們今天的課程。

一、分析

  這個(gè)功能只要是給綠幕人物加上背景,比如:在直播的時(shí)候,因?yàn)樗矫芑蛘咂渌颍幌胪嘎冻霰尘?/span>

  設(shè)想只需要購(gòu)買(mǎi)一塊綠幕,然后上網(wǎng)挑選一張自己喜歡的背景照片,就可以擁有一個(gè)好看的背景。

  如何替換視頻背景呢?我們一步一步入門(mén)?。?/span>

  1)綠幕相片扣出人物

  2)人物放進(jìn)背景圖片

  3)操作視頻幀圖片,實(shí)現(xiàn)替換綠幕。

  需要安裝的nuget包,注意查看依賴項(xiàng)選版本

OpenCvSharp4
OpenCvSharp4.runtime.win

二、綠幕相片扣出人物

  只展示核心代碼

  1)識(shí)別綠幕函數(shù)(一般操作圖片是使用指針的,為了更好理解,我們這里先At執(zhí)行,后面會(huì)講使用指針改進(jìn))

        //刪除綠幕
        private unsafe void RemoveImageScreen(Mat src, Func<Vec3b, bool> func)
        {
            for (int i = 0; i < src.Rows; i++)
            {
                for (int j = 0; j < src.Cols; j++)
                {
                    if (func(src.At<Vec3b>(i, j)))
                    {
                        src.At<Vec3b>(i, j) = new Vec3b(0, 0, 0);
                    }
                }
            }
        }

  2)選擇圖片并清除綠幕

            using (ResourcesTracker t = new ResourcesTracker())
            {
                Bitmap bitmap = new Bitmap(pictBox_origin.Image);
                var mat = BitmapConverter.ToMat(bitmap);
                RemoveImageScreen(mat,
                    p =>
                    {
                        int max = Math.Max(p.Item0, Math.Max(p.Item1, p.Item2));
                        if (max == p.Item1 && p.Item1 > 30) //BGR,當(dāng)G最大時(shí)且大于30時(shí),可以根據(jù)實(shí)際調(diào)節(jié)這個(gè)閾值
                            return true;
                        return false;
                    });
                pictBox_result.Image = BitmapConverter.ToBitmap(mat_bg);
        }

  效果展示:(我是跟著楊神的思路寫(xiě)的這個(gè)程序,素材就直接用楊神了,這篇是入門(mén)級(jí)別,可以看完我這篇再去觀摩楊神的)

  楊中科(就是下圖這個(gè)帥哥):https://www.bilibili.com/read/cv8850462?spm_id_from=333.999.0.0

  C# OpenCVSharp圖像入門(mén)_給綠幕圖片視頻加背景

?三、人物放進(jìn)背景圖片

  合并圖片函數(shù)

        private unsafe void MergeImageAt(Mat bg, Mat src, Func<Vec3b, bool> func)
        {
            Cv2.Resize(bg, bg, src.Size());//以背景人物大小為準(zhǔn)
            for (int i = 0; i < bg.Rows; i++)
            {
                for (int j = 0; j < bg.Cols; j++)
                {
                    if (func(src.At<Vec3b>(i, j)))
                    {
                        bg.At<Vec3b>(i, j) = src.At<Vec3b>(i, j);
                    }
                }
            }
        }

  續(xù)上上一步,加上合并圖片的步驟

            using (ResourcesTracker t = new ResourcesTracker())
            {
                Bitmap bitmap = new Bitmap(pictBox_origin.Image);
                var mat = BitmapConverter.ToMat(bitmap);
                var mat_bg = t.T(Cv2.ImRead("images/bg2.jpg"));
                RemoveImageScreen(mat,
                    p =>
                    {
                        int max = Math.Max(p.Item0, Math.Max(p.Item1, p.Item2));
                        if (max == p.Item1 && p.Item1 > 30)
                            return true;
                        return false;
                    });
                MergeImageAt( mat_bg, mat,
                    p =>
                    {
                        if (p == new Vec3b(0, 0, 0))
                        {
                            return false;
                        }
                        return true;
                    }
                    );
                pictBox_result.Image = BitmapConverter.ToBitmap(mat_bg);
            }

  效果如圖:

  C# OpenCVSharp圖像入門(mén)_給綠幕圖片視頻加背景

?四、操作視頻幀圖片,實(shí)現(xiàn)替換綠幕

  和圖片的區(qū)別,就是需要先逐幀獲取 視頻/攝像機(jī) 的圖片,然后按上述操作進(jìn)行

  直接附上完整Demo(已經(jīng)將兩個(gè)函數(shù)改為指針操作,大家可以先試試原來(lái)的At操作,可以明顯看到視頻是慢速播放)

using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyOpenCV
{
    public static class RemoveGreenScreen
    {
        public static unsafe void Start()
        {
            //VideoCapture videoCapture = new VideoCapture(1, VideoCaptureAPIs.DSHOW);//攝像頭
            VideoCapture videoCapture = new VideoCapture(@"images/綠幕視頻.mp4");
            using (videoCapture)
            using (Mat frameMat = new Mat())
            using (Mat mat_bg = Cv2.ImRead("images/bg.png"))
            {
                if (videoCapture.CaptureType == CaptureType.Camera)//如果是攝像頭
                {
                    videoCapture.FrameWidth = 800;
                    videoCapture.FrameHeight = 600;
                    videoCapture.FourCC = "MJPG";
                }
                while (true)
                {
                    if (!videoCapture.Read(frameMat))
                    {
                        //如果是視頻文件,從頭部開(kāi)始播放
                        if (videoCapture.CaptureType == CaptureType.File)
                        {
                            videoCapture.PosFrames = 0;
                        }
                        continue;
                    }
                    RemoveImageScreen(frameMat,
                        p =>
                        {
                            int max = Math.Max(p.Item0, Math.Max(p.Item1, p.Item2));
                            if (max == p.Item1 && p.Item1 > 30)
                                return true;
                            return false;
                        });
                    var bg_clone = mat_bg.Clone();
                    MergeImage(bg_clone, frameMat,
                        p =>
                        {
                            if (p == new Vec3b(0, 0, 0))
                            {
                                return false;
                            }
                            return true;
                        });
                    Cv2.ImShow("press any key to quit", bg_clone);
                    if (Cv2.WaitKey(1) > 0)
                    {
                        break;
                    }
                }
            }
            Cv2.DestroyAllWindows();
        }

        private static unsafe void RemoveImageScreen(Mat src, Func<Vec3b, bool> func)
        {
            Vec3b* start = (Vec3b*)src.DataStart;
            Vec3b* end = (Vec3b*)src.DataEnd;
            for (Vec3b* p = start; p <= end; p++)
            {
                if (func(*p))
                {
                    *p = new Vec3b(0, 0, 0);
                }
            }
        }
        private static unsafe void MergeImage(Mat bg, Mat src, Func<Vec3b, bool> func)
        {
            Cv2.Resize(bg, bg, src.Size());
            Vec3b* bg_pointer = (Vec3b*)bg.DataStart;
            Vec3b* start = (Vec3b*)src.DataStart;
            Vec3b* end = (Vec3b*)src.DataEnd;
            for (Vec3b* p = start; p <= end; p++, bg_pointer++)
            {
                *bg_pointer = func(*p) ? *p : *bg_pointer;
            }
        }
    }
}

  素材:

  C# OpenCVSharp圖像入門(mén)_給綠幕圖片視頻加背景? ??C# OpenCVSharp圖像入門(mén)_給綠幕圖片視頻加背景

  效果展示:(這是視頻的一張截圖)

  C# OpenCVSharp圖像入門(mén)_給綠幕圖片視頻加背景

  完成?。?!

  圖片去綠幕的效果還是很粗糙的,后續(xù)會(huì)持續(xù)更新改進(jìn)方法,希望大家點(diǎn)贊+關(guān)注

  并歡迎大家留言...

  

?

?

?

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-637917.html

到了這里,關(guān)于C# OpenCVSharp圖像入門(mén)_給綠幕圖片視頻加背景的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C# OpenCvSharp 圖片批量改名

    C# OpenCvSharp 圖片批量改名

    目錄 效果 項(xiàng)目 代碼 下載 C# OpenCvSharp 圖片批量改名 using NLog; using OpenCvSharp; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows.Forms; namespace OpenCvSharp_Demo { ? ? public partial class Form1 : Form ? ? { ? ? ? ? public Form1() ? ? ? ? { ? ? ? ? ? ? InitializeCo

    2024年03月12日
    瀏覽(39)
  • C# OpenCvSharp 圖像校正

    C# OpenCvSharp 圖像校正

    目錄 效果 代碼 下載 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp; using OpenCvSharp.Extensions; namespace OpenCvSharp_圖像校正 { ? ? public partial class Form1 : Form ? ? { ? ? ? ? pu

    2024年02月15日
    瀏覽(21)
  • C#圖像處理-OpenCVSharp教程:OpenCVSharp與EmguCV的比較與介紹

    C#圖像處理-OpenCVSharp教程:OpenCVSharp與EmguCV的比較與介紹 圖像處理在計(jì)算機(jī)視覺(jué)和計(jì)算機(jī)圖形學(xué)等領(lǐng)域發(fā)揮著至關(guān)重要的作用。本教程將介紹在C#中使用OpenCVSharp和EmguCV這兩個(gè)流行的圖像處理庫(kù),它們提供了豐富的功能和強(qiáng)大的性能。 一、OpenCVSharp介紹與特點(diǎn) OpenCVSharp是OpenCV的

    2024年02月21日
    瀏覽(25)
  • C#結(jié)合OpenCVSharp4圖片相似度識(shí)別

    需求背景:需要計(jì)算兩個(gè)圖片的相似度,然后將相似的圖片進(jìn)行歸納 由于我是CRUD后端仔,對(duì)圖像處理沒(méi)什么概念。因此網(wǎng)上調(diào)研了幾種相似度算法分析其適用場(chǎng)景。 直方圖算法 獲取要比較的2個(gè)圖片的直方圖數(shù)據(jù),然后再將直方圖數(shù)據(jù)歸一化比較,最終得到一個(gè)相似指數(shù),

    2024年02月09日
    瀏覽(19)
  • c# OpenCvSharp讀取、顯示和寫(xiě)入圖像(二)

    c# OpenCvSharp讀取、顯示和寫(xiě)入圖像(二)

    ????????讀取、顯示和寫(xiě)入圖像是圖像處理和計(jì)算機(jī)視覺(jué)的基礎(chǔ)。即使在裁剪、調(diào)整大小、旋轉(zhuǎn)或應(yīng)用不同的濾鏡來(lái)處理圖像時(shí),您也需要先讀取圖像。因此,掌握這些基本操作非常重要。 imread()讀取圖像 imshow()在窗口中顯示圖像 imwrite()將圖像保存到文件目錄里 我們將使

    2024年02月02日
    瀏覽(23)
  • C#圖像處理-使用OpenCVSharp讀取或修改圖像像素值

    圖像處理是計(jì)算機(jī)視覺(jué)領(lǐng)域的重要應(yīng)用之一,而OpenCV是一個(gè)強(qiáng)大且廣泛使用的開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)。在C#中,我們可以通過(guò)OpenCVSharp庫(kù)來(lái)實(shí)現(xiàn)圖像處理的各種功能,包括讀取和修改圖像像素值。本文將介紹如何使用OpenCVSharp來(lái)讀取和修改圖像像素值,并提供相應(yīng)的源代碼。 首先,

    2024年04月28日
    瀏覽(128)
  • 測(cè)試C#使用OpenCvSharp從攝像頭獲取圖片

    測(cè)試C#使用OpenCvSharp從攝像頭獲取圖片

    ??OpenCvSharp也支持獲取攝像頭數(shù)據(jù),不同于之前測(cè)試AForge時(shí)使用AForge控件顯示攝像頭數(shù)據(jù)流并從中截圖圖片,OpenCvSharp中顯示攝像頭數(shù)據(jù)流需要周期性地從攝像頭中截取圖片并顯示在指定控件中。本文學(xué)習(xí)C#使用OpenCvSharp從攝像頭獲取圖片的基本方式。 ??新建基于.net core的

    2024年01月18日
    瀏覽(16)
  • c# OpenCvSharp圖像裁剪、調(diào)整大小、旋轉(zhuǎn)、透視(三)

    圖像裁剪、調(diào)整大小、旋轉(zhuǎn)、透視圖像處理基本操作。 croppedImage?圖像裁剪 Cv2.Resize() 調(diào)整圖像大小 圖像旋轉(zhuǎn) Cv2.Rotate()旋轉(zhuǎn) Cv2.Flip()翻轉(zhuǎn) Cv2.WarpAffine()任意角度旋轉(zhuǎn) Cv2.GetAffineTransform()透視 Rect rect = new Rect(x, y, width, height); // x, y 為起始坐標(biāo),width, height 為裁剪寬高 參數(shù) 說(shuō)明

    2024年02月04日
    瀏覽(12)
  • C# OpenCvSharp Yolov8 Cls 圖像分類(lèi)

    C# OpenCvSharp Yolov8 Cls 圖像分類(lèi)

    目錄 效果 項(xiàng)目 模型信息 代碼 下載? Model Properties ------------------------- date:2023-09-07T17:11:37.011156 description:Ultralytics YOLOv8n-cls model trained on ../datasets/imagenet author:Ultralytics task:classify license:AGPL-3.0 https://ultralytics.com/license version:8.0.172 stride:1 batch:1 imgsz:[640, 640] names:{0:

    2024年02月07日
    瀏覽(23)
  • C#圖像處理-OpenCVSharp教程:安裝配置與簡(jiǎn)單實(shí)例

    C#圖像處理-OpenCVSharp教程:安裝配置與簡(jiǎn)單實(shí)例 在本教程中,我們將學(xué)習(xí)如何在C#中使用OpenCVSharp進(jìn)行圖像處理。首先,我們會(huì)介紹OpenCVSharp的安裝和配置過(guò)程,然后我們將展示一些簡(jiǎn)單實(shí)例來(lái)演示圖像處理的基本功能。 一、安裝與配置OpenCVSharp 下載OpenCVSharp庫(kù)文件 首先,我們

    2024年03月09日
    瀏覽(30)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包