【opencv三】利用opencv讀取顯示圖片

在opencv中讀取顯示圖片的頭文件是highgui.hpp。
整體代碼如下,如要測試自己的圖片,需要將代碼段中的圖片地址更改爲自己圖片的絕對路徑。

#include "opencv2/highgui/highgui.hpp"
using namespace cv;

int main()
{
	Mat img = imread("H://vs2017//opencv_learning//ConsoleApplication1//1544516218.jpg");
	if (img.empty())
	{
		return -1;
	}
	namedWindow("Example1",WINDOW_AUTOSIZE);
	imshow("Example1",img);
	waitKey(0);
	destroyWindow("Example1");
    return 0;
}

代碼解析:

Mat img = imread("Your Img Path");

imread函數:可以讀取很多類型的圖片,包括:BMP, DIB, JPEG, JPE, PNG, PBM, PGM, PPM, SR, RAS, and TIFF。最終返回一個Mat數據類型的數據,這是opencv處理的基礎數據結構。


namedWindow("Example1",WINDOW_AUTOSIZE);

namedWindow函數:在屏幕上打開一個窗口,改窗口用來顯示讀取的圖像,括號中的參數是預先定義了顯示窗口的屬性,第一個參數將窗口命名爲“Example1”,第二個參數定義了窗口的屬性,該參數默認值爲“0”或者置爲“WINDOW_AUTOSIZE”。

  • 參數“0”:圖片顯示的時候,不會考慮原始圖片的尺寸,會根據窗口的大小顯示。
  • 參數“WINDOW_AUTOSIZE”:通過改變窗口尺寸,顯示圖片真實的大小。

但此時圖片還未顯示,該指令僅僅是爲圖片的顯示作準備工作。一般顯示狀態如下圖所示。

imshow("Example1",img);

imshow函數:利用該函數將Mat數據結構顯示在已經存在的窗口中(由namedWindow函數生成的窗口)。根據上述的參數“WINDOW_AUTOSIZE”,窗口的大小會自動根據原始圖像的尺寸進行調整,並顯示。


waitKey(0);

waitKey函數:該函數的參數可以是任意自然數。

  • 參數爲‘0或者負數’:當讀取到鼠標點擊信號後,進入下面的程序段。
  • 參數爲“大於0的自然數”:若該自然數爲1000,則其含義爲程序等待1000ms(1秒)後進入下面的程序段。

Note:在cv::Mat中,當圖像超出作用域時,它們將被自動釋放,這與標準模板庫(STL)樣式的容器類類似。這個自動重分配由內部引用計數器控制。在很大程度上,這意味着我們不再需要擔心映像的分配和重新分配,這可以讓程序員從OpenCV 1.0 IplImage強加的繁瑣簿記中解脫出來。


destroyWindow("Example1");

destroyWindow函數:該函數會關掉圖片顯示窗口,並且回收內存。

在當前實例中,該函數的功能可以忽略。但未來對於更長的、更復雜的程序,程序員應該確保在超出範圍之前清理窗口,以避免內存泄漏。


本人csdn博客地址:https://blog.csdn.net/qiu931110/
本人微信公衆號:yuanCruise

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章