C# 使用OpenCV
OpenCV是一個(gè)開源的跨平臺(tái)計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫(kù),可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。C#在上位機(jī)開發(fā)中比較常用,有些項(xiàng)目需要在上位機(jī)上加入一些機(jī)器視覺相關(guān)的功能,在下面簡(jiǎn)單介紹了C#中使用OpenCV庫(kù)的方法。
安裝OpenCV包
在管理NuGet包中,搜索OpenCvSharp4,安裝三個(gè)包,OpenCV在Net平臺(tái)的核心包OpencvSharp4
,windows平臺(tái)運(yùn)行包OpenCvSharp4.runtime.win
,擴(kuò)展包OpenCvSharp4.Extensions
。
三個(gè)包的介紹:
-
OpencvSharp4
:.NET 的 OpenCV 包裝器。 由于此包僅包含核心托管庫(kù),因此需要另一個(gè)適用于您操作系統(tǒng)的本機(jī)綁定包 (OpenCvSharp4.runtime.*)。 -
OpenCvSharp4.runtime.win
:OpenCvSharp 的內(nèi)部實(shí)現(xiàn)包,可在 UWP 以外的 Windows 上運(yùn)行。 -
OpenCvSharp4.Extensions
:OpenCvSharp GDI+ 擴(kuò)展庫(kù)。注意:net framework需要4.8才能支持
圖片操作
Mat類
Mat是OpenCV中一個(gè)非常重要的類,它用于存儲(chǔ)和操作圖像像素?cái)?shù)據(jù),圖像讀寫和處理都要用到Mat類。
圖片讀入
使用Mat Cv2.ImRead(string fileName, ImreadModes flags = ImreadModes.Color)
讀入圖片
參數(shù):
fileName
:圖片路徑
flags
:圖片讀入模式,默認(rèn)Color(3 通道 BGR 彩色圖像)
返回值:
Mat
類型:用于存儲(chǔ)和操作圖像像素?cái)?shù)據(jù)
示例:
Mat image = Cv2.ImRead("image.jpg");
圖片讀入模式
ImreadModes
是指定加載圖像的顏色和深度的枚舉,他可選的類型如下:
[Flags]
public enum ImreadModes
{
//
// 摘要:
// 如果設(shè)置,則按原樣返回加載的圖像(帶 alpha 通道,否則會(huì)被裁剪)。
Unchanged = -1,
//
// 摘要:
// 如果設(shè)置,總是將圖像轉(zhuǎn)換為單通道灰度圖像。
Grayscale = 0x0,
//
// 摘要:
// 如果設(shè)置,總是將圖像轉(zhuǎn)換為 3 通道 BGR 彩色圖像。
Color = 0x1,
//
// 摘要:
// 如果設(shè)置,當(dāng)輸入具有相應(yīng)的深度時(shí)返回16位/32位圖像,否則將其轉(zhuǎn)換為8位。
AnyDepth = 0x2,
//
// 摘要:
// 如果設(shè)置,圖像將以任何可能的顏色格式讀取。
AnyColor = 0x4,
//
// 摘要:
// 如果設(shè)置,則使用 gdal 驅(qū)動(dòng)程序加載圖像。
LoadGdal = 0x8,
//
// 摘要:
// 如果設(shè)置,總是將圖像轉(zhuǎn)換為單通道灰度圖像,圖像尺寸縮小 1/2。
ReducedGrayscale2 = 0x10,
//
// 摘要:
// 如果設(shè)置,總是將圖像轉(zhuǎn)換為 3 通道 BGR 彩色圖像并且圖像尺寸減小 1/2。
ReducedColor2 = 0x11,
//
// 摘要:
// 如果設(shè)置,總是將圖像轉(zhuǎn)換為單通道灰度圖像,圖像尺寸縮小 1/4。
ReducedGrayscale4 = 0x20,
//
// 摘要:
// 如果設(shè)置,總是將圖像轉(zhuǎn)換為 3 通道 BGR 彩色圖像并且圖像尺寸縮小 1/4。
ReducedColor4 = 0x21,
//
// 摘要:
// 如果設(shè)置,總是將圖像轉(zhuǎn)換為單通道灰度圖像,圖像尺寸縮小 1/8。
ReducedGrayscale8 = 0x40,
//
// 摘要:
// 如果設(shè)置,總是將圖像轉(zhuǎn)換為 3 通道 BGR 彩色圖像并且圖像尺寸減小 1/8。
ReducedColor8 = 0x41,
//
// 摘要:
// 如果設(shè)置,則不根據(jù) EXIF 的方向標(biāo)志旋轉(zhuǎn)圖像。
IgnoreOrientation = 0x80
}
圖像顯示
- 在新的窗口中顯示圖像
使用Cv2.ImShow(string winName, Mat mat)
打開一個(gè)窗口顯示圖像
winName
:窗體名稱
mat
:Mat類,存儲(chǔ)的圖像數(shù)據(jù)
Cv2.ImShow("test", mat);
- 關(guān)閉圖像
Cv2.DestroyWindow(string winName)
關(guān)閉對(duì)應(yīng)的圖像窗口
winName
:要關(guān)閉的窗體名稱
Cv2.DestroyWindow("test");
3.關(guān)閉所有圖像窗口
Cv2.DestroyAllWindows()
關(guān)閉所有顯示圖像的窗口
Cv2.DestroyAllWindows();
圖像寫入
使用Cv2.ImWrite(string fileName, Mat img, int[]? prms = null)
進(jìn)行寫入
fileName
:文件名文章來源:http://www.zghlxwxcb.cn/news/detail-609731.html
img
:寫入的文件對(duì)象,Mat類型文章來源地址http://www.zghlxwxcb.cn/news/detail-609731.html
Cv2.ImWrite("test2.png", mat);
到了這里,關(guān)于C# 使用OpenCV基本圖像操作功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!