最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用C#調(diào)用OpenCvSharp庫實現(xiàn)核心圖像處理功能的方法

 更新時間:2025年11月06日 09:57:05   作者:拾荒的小海螺  
圖像處理是計算機視覺的核心環(huán)節(jié)之一,而在 C# 中,我們可以使用開源的 OpenCvSharp 庫來快速完成各種圖像操作,本文就給大家介紹了如何使用C#調(diào)用OpenCvSharp庫實現(xiàn)核心圖像處理功能,需要的朋友可以參考下

1、簡述

圖像處理是計算機視覺的核心環(huán)節(jié)之一,而在 C# 中,我們可以使用開源的 OpenCvSharp 庫來快速完成各種圖像操作。

本文將從零開始,帶你實戰(zhàn)幾個典型的圖像任務(wù):

  • 圖像糾偏(Perspective Correction)
  • 背景擦除(Background Removal)
  • 圖像裁切(Crop)
  • 圖像分割(Segmentation)

2、OpenCvSharp 是什么

OpenCvSharp 是對 OpenCV 的 .NET 封裝,提供與 Python/C++ OpenCV 幾乎一致的 API。

特點:

  • 跨平臺(Windows / Linux / macOS)
  • 與 .NET 無縫集成
  • 支持 OpenCV 全部特性(濾波、特征、OCR、檢測等)
  • 可與 WPF / WinForms / ASP.NET 一起使用

3、實踐樣例

3.1 環(huán)境準備

1、創(chuàng)建控制臺項目

dotnet new console -n OpenCvSharpDemo
cd OpenCvSharpDemo

2、安裝依賴包

dotnet add package OpenCvSharp4
dotnet add package OpenCvSharp4.runtime.win

(如果在 macOS/Linux,請改為 OpenCvSharp4.runtime.osx 或 .linux

3.2 載入圖像基礎(chǔ)操作

using OpenCvSharp;
using System;

class Program
{
    static void Main()
    {
        var src = Cv2.ImRead("input.jpg"); // 讀取圖像
        Cv2.ImShow("原圖", src);
        Cv2.WaitKey();
    }
}

3.3 圖像糾偏(透 視變換)

場景: 例如拍攝文件或票據(jù)時角度不正,想要自動“拉正”。

核心步驟

  • 找到文檔的四個頂點;
  • 使用 Cv2.GetPerspectiveTransform() 計算變換矩陣;
  • 使用 Cv2.WarpPerspective() 進行透 視矯正。
var src = Cv2.ImRead("document.jpg");

// 模擬已檢測的四個角點(順時針)
Point2f[] srcPoints = {
    new Point2f(320, 150),
    new Point2f(700, 130),
    new Point2f(750, 600),
    new Point2f(280, 620)
};

// 目標矩形區(qū)域
Point2f[] dstPoints = {
    new Point2f(0, 0),
    new Point2f(500, 0),
    new Point2f(500, 700),
    new Point2f(0, 700)
};

Mat matrix = Cv2.GetPerspectiveTransform(srcPoints, dstPoints);
Mat corrected = new Mat();
Cv2.WarpPerspective(src, corrected, matrix, new Size(500, 700));

Cv2.ImShow("糾偏后", corrected);
Cv2.WaitKey();

運行后,文檔會自動被“拉平”。

3.4 背景擦除(背景去除)

目標: 去除背景,僅保留主要前景(如人物、物體)。

常用方法:GrabCut 算法。

var src = Cv2.ImRead("person.jpg");
var mask = new Mat();
var bgdModel = new Mat();
var fgdModel = new Mat();

// 定義前景區(qū)域(大致框住主體)
Rect rect = new Rect(50, 50, src.Width - 100, src.Height - 100);

// 使用 GrabCut 算法
Cv2.GrabCut(src, mask, rect, bgdModel, fgdModel, 5, GrabCutModes.InitWithRect);

// 提取前景
mask = (mask == 1) + (mask == 3);
Mat foreground = new Mat();
src.CopyTo(foreground, mask);

Cv2.ImShow("背景擦除結(jié)果", foreground);
Cv2.WaitKey();

輸出:背景被透明或黑色替換,僅保留人物部分。

3.5 圖像裁切(Crop)

目標: 提取圖像中指定區(qū)域,例如人臉或物體。

var src = Cv2.ImRead("input.jpg");
Rect roi = new Rect(100, 50, 200, 200); // x, y, width, height
Mat cropped = new Mat(src, roi);
Cv2.ImShow("裁切區(qū)域", cropped);
Cv2.WaitKey();

也可以結(jié)合人臉檢測結(jié)果自動生成 ROI。

3.6 圖像分割(Segmentation)

目標: 按顏色或亮度分割區(qū)域,例如提取藍天、綠草、白紙。

方法一:顏色閾值分割(HSV 空間)

var src = Cv2.ImRead("flower.jpg");
Mat hsv = new Mat();
Cv2.CvtColor(src, hsv, ColorConversionCodes.BGR2HSV);

// 定義顏色范圍(例如紅色)
Scalar lower = new Scalar(0, 100, 100);
Scalar upper = new Scalar(10, 255, 255);

Mat mask = new Mat();
Cv2.InRange(hsv, lower, upper, mask);

// 提取目標區(qū)域
Mat result = new Mat();
Cv2.BitwiseAnd(src, src, result, mask);

Cv2.ImShow("顏色分割結(jié)果", result);
Cv2.WaitKey();

方法二:KMeans 聚類分割

將圖像像素聚類為 K 類,從而自動分割前景/背景。

var src = Cv2.ImRead("scene.jpg");
Mat samples = src.Reshape(1, src.Rows * src.Cols);
samples.ConvertTo(samples, MatType.CV_32F);

int K = 3;
Mat labels = new Mat();
Mat centers = new Mat();

Cv2.Kmeans(samples, K, labels,
    new TermCriteria(CriteriaTypes.Eps | CriteriaTypes.MaxIter, 10, 1.0),
    3, KMeansFlags.PpCenters, centers);

centers.ConvertTo(centers, MatType.CV_8U);
var segmented = new Mat(src.Size(), src.Type());

for (int y = 0; y < src.Rows; y++)
{
    for (int x = 0; x < src.Cols; x++)
    {
        int label = labels.Get<int>(y * src.Cols + x);
        var color = centers.At<Vec3b>(label);
        segmented.Set(y, x, color);
    }
}

Cv2.ImShow("KMeans 圖像分割", segmented);
Cv2.WaitKey();

輸出:將圖像按顏色聚類成多個區(qū)域。

4、結(jié)語

通過本文,你學(xué)會了如何在 C# 中利用 OpenCvSharp 實現(xiàn)多種常見圖像操作,包括:

  •  透 視糾偏;
  • 背景去除;
  • 圖像裁切;
  • 分割提取。
功能方法
圖像糾偏Cv2.GetPerspectiveTransform + Cv2.WarpPerspective
背景擦除Cv2.GrabCut
圖像裁切new Mat(src, Rect)
圖像分割Cv2.InRange / Cv2.Kmeans
圖像顯示Cv2.ImShow
圖像保存Cv2.ImWrite("output.jpg", mat)

OpenCvSharp 是 .NET 圖像處理領(lǐng)域最強大的工具之一,既可用于工業(yè)檢測、票據(jù)識別、OCR 前處理,也能應(yīng)用在智能拍照與 AI 視覺項目中。

以上就是使用C#調(diào)用OpenCvSharp庫實現(xiàn)核心圖像處理功能的方法的詳細內(nèi)容,更多關(guān)于C# OpenCvSharp圖像處理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 用 C# Winform做出全透明的磨砂玻璃窗體效果代碼

    用 C# Winform做出全透明的磨砂玻璃窗體效果代碼

    就是一個簡單的例子, 調(diào)用系統(tǒng)的 dwm 去重繪窗口. 只能在 Vista 和 7 之后才可以, 并且要確保已經(jīng)開啟主題服務(wù)等等, 總之不是非常實用, 好玩而已
    2011-05-05
  • C#中使用Split方法拆分字符串實例

    C#中使用Split方法拆分字符串實例

    這篇文章主要介紹了C#中使用Split方法拆分字符串實例,本文給出了使用一個分隔符和多個分隔符拆分字符串的例子,需要的朋友可以參考下
    2014-08-08
  • C# 命名空間(Namespace)相關(guān)知識總結(jié)

    C# 命名空間(Namespace)相關(guān)知識總結(jié)

    這篇文章主要介紹了C# 命名空間(Namespace)的相關(guān)知識,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以參考下
    2020-06-06
  • c#如何顯式實現(xiàn)接口成員

    c#如何顯式實現(xiàn)接口成員

    這篇文章主要介紹了c#如何顯式實現(xiàn)接口成員,幫助大家更好的利用c#處理接口,感興趣的朋友可以了解下
    2020-10-10
  • c# winform 解決PictureBox 無法打印全部圖片的問題

    c# winform 解決PictureBox 無法打印全部圖片的問題

    這篇文章主要介紹了c# winform 解決PictureBox 無法打印全部圖片的問題,幫助大家更好進行c# winform開發(fā),感興趣的朋友可以了解下
    2020-12-12
  • unity中實現(xiàn)Edge瀏覽器鼠標手勢的功能思路詳解

    unity中實現(xiàn)Edge瀏覽器鼠標手勢的功能思路詳解

    這篇文章主要介紹了unity中實現(xiàn)Edge瀏覽器鼠標手勢的功能思路詳解,實現(xiàn)起來其實并不復(fù)雜,涉及的技術(shù)點有pc端和移動端屏幕拖動事件,二維向量的相關(guān)運算,手勢匹配算法,事件系統(tǒng)設(shè)計模式,需要的朋友可以參考下
    2023-12-12
  • C#中Linq的入門教程

    C#中Linq的入門教程

    這篇文章介紹了C#中Linq的基礎(chǔ)操作,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C# 枚舉的使用簡介

    C# 枚舉的使用簡介

    這篇文章主要介紹了C# 枚舉的簡單使用,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#中抽象類與接口的區(qū)別詳解

    C#中抽象類與接口的區(qū)別詳解

    本文主要介紹了C#中抽象類與接口的區(qū)別。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • 使用C#實現(xiàn)RTP數(shù)據(jù)包傳輸 參照RFC3550

    使用C#實現(xiàn)RTP數(shù)據(jù)包傳輸 參照RFC3550

    本篇文章小編為大家介紹,使用C#實現(xiàn)RTP數(shù)據(jù)包傳輸 參照RFC3550,需要的朋友參考下
    2013-04-04

最新評論

富阳市| 长岭县| 新源县| 康乐县| 阳山县| 耿马| 丹寨县| 大连市| 滨海县| 远安县| 南通市| 琼结县| 平舆县| 沛县| 瓦房店市| 文昌市| 海盐县| 泸西县| 库尔勒市| 景东| 古蔺县| 开平市| 普兰店市| 沧源| 温宿县| 托里县| 延边| 惠安县| 民县| 那坡县| 甘孜县| 屏山县| 永泰县| 炎陵县| 朝阳市| 阿城市| 兴宁市| 仪征市| 江门市| 白城市| 齐齐哈尔市|