之前也寫過一些 OpenCV 的文章,最近正好在考慮 寫一個 OpenCV相關(guān)的工具,目前還是在開發(fā)過程中,邊開發(fā)邊更新。預(yù)計會持續(xù)一段時間。目前的想法是把 OpenCV 的 API 在這個工具上都實現(xiàn)一遍。
OpenCV 的內(nèi)容挺多的,而且不使用的話,容易忘記,所以通過制造工具的方式來給自己加深印象,平常要處理圖片的時候,就可以用自己的工具直接處理,不需要每次都去重復(fù)的寫代碼。
今天我們就來看看,學(xué)習(xí) OpenCV 如何加載圖片,顯示并保存圖片。大部分人可能都知道我們平常使用的圖片都是使用RGB表示的,但是 OpenCV 中圖片顏色的通道順序稍微有些不同,它是 B - G - R 的通道順序保存的。平常所說的灰度圖是就只有一個通道。
目標(biāo)
我們來看看今天是目標(biāo)是什么?
加載圖片
使用 Cv2.ImRead() 來讀入一張圖片:
Mat sourceImage = Cv2.ImRead(filePath, ImreadModes.Unchanged);
// 定義
public Mat ImRead(string fileName, ImreadModes flags = ImreadModes.Color)
- 參數(shù)1:圖片的文件名
- 如果圖片放在當(dāng)前文件夾下,直接寫文件名就行,如'lena.jpg'
- 否則需要給出絕對路徑,如'D:xxxlena.jpg'
- 參數(shù)2:讀入方式,省略即采用默認(rèn)值 比較常用的是以下三個
public enum ImreadModes
{
Unchanged = -1, // 包含透明通道的彩色圖
Grayscale = 0, // 灰度圖
Color = 1, // 彩色圖
...
}
注意:我們加載圖片的時候,最好不要使用中文路徑,容易入坑。
顯示圖片
使用 Cv2.ImShow() 顯示圖片,窗口會自適應(yīng)圖片的大小:
Cv2.ImShow("lena", sourceImage);
Cv2.WaitKey(0);
// 定義
public void ImShow(string winName, Mat mat);
public static int WaitKey(int delay = 0);
Cv2.ImShow 參數(shù)1是窗口的名字,參數(shù)2是要顯示的圖片。不同窗口之間用窗口名區(qū)分,所以窗口名相同就表示是同一個窗口,顯示結(jié)果如下:
Cv2.WaitKey() ,從字面上看,等待一個輸入的意思 , 參數(shù)是等待時間(單位:毫秒ms)。時間一到,會繼續(xù)執(zhí)行接下來的程序,傳入0的話表示一直等待。當(dāng)我們需要在根據(jù)某個輸入推出等待的時候,我們可以使用 k = Cv2.WaitKey(0) ,這樣 k 就是我們的輸入結(jié)果。
另外,我們也可以先用 Cv2.NamedWindow() 創(chuàng)建一個窗口,之后再顯示圖片:
Cv2.NamedWindow("lena2", 1);
Cv2.ImShow("lena", sourceImage);
Cv2.WaitKey(0);
// 定義
public void NamedWindow(string winName, WindowFlags flags = WindowFlags.GuiExpanded)
參數(shù)1依舊是窗口的名字,參數(shù)2默認(rèn)是WindowFlags.GuiExpanded,表示窗口展示模式。
保存圖片
使用Cv2.ImWrite保存圖片,參數(shù)1是包含后綴名的文件名, 參數(shù)2 是:
Cv2.ImWrite("lena.jpg", sourceImage);
// 定義
public static void ImShow(string winName, Mat mat)
是不是感覺很簡單,OpenCV在圖片的基礎(chǔ)操作上其實都挺簡單的,到后面加上一些應(yīng)用場景之后就會復(fù)雜起來。
-
RGB
+關(guān)注
關(guān)注
4文章
801瀏覽量
58731 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4346瀏覽量
62999 -
代碼
+關(guān)注
關(guān)注
30文章
4830瀏覽量
69110 -
OpenCV
+關(guān)注
關(guān)注
31文章
635瀏覽量
41587
發(fā)布評論請先 登錄
相關(guān)推薦
![](https://file1.elecfans.com/web2/M00/83/7E/wKgZomRl23OABj51AABoK_rbEJA714.png)
![](https://file1.elecfans.com/web2/M00/83/7E/wKgZomRl23OAXdbhAAB9IUMWNbI635.png)
【DragonBoard 410c試用體驗】之OpenCV加載圖片實驗
【DragonBoard 410c試用體驗】cvThreshold閾值操作實現(xiàn)二值圖像
【NanoPi NEO試用體驗】OpenCV使用篇
【HarmonyOS】鴻蒙圖片加載工具匯總
如何使用OpenCV來實現(xiàn)模型加載與推演
基于openharmony適配移植的圖片加載器
opencv讀入圖片注意事項詳解1
opencv讀入圖片注意事項詳解 2
【AWTK使用經(jīng)驗】加載和釋放外部圖片
![【AWTK使用經(jīng)驗】<b class='flag-5'>加載</b>和釋放外部<b class='flag-5'>圖片</b>](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
評論