OpenCV 圖像加載和顯示

2018-08-28 15:33 更新

目標(biāo)

在本教程中,您將學(xué)習(xí)如何:

源代碼

這里下載源代碼。

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
    String imageName( "../data/HappyFish.jpg" ); // by default
    if( argc > 1)
    {
        imageName = argv[1];
    }
    Mat image;
    image = imread( imageName, IMREAD_COLOR ); // Read the file
    if( image.empty() )                      // Check for invalid input
    {
        cout <<  "Could not open or find the image" << std::endl ;
        return -1;
    }
    namedWindow( "Display window", WINDOW_AUTOSIZE ); // Create a window for display.
    imshow( "Display window", image );                // Show our image inside it.
    waitKey(0); // Wait for a keystroke in the window
    return 0;
}

代碼鏈接:點(diǎn)擊進(jìn)入

說(shuō)明

在OpenCV 2中,我們有多個(gè)模塊。每個(gè)人負(fù)責(zé)處理不同的區(qū)域或方法。您可以在這些教程本身的用戶(hù)指南的結(jié)構(gòu)中觀察到這一點(diǎn)。在您使用其中任何一個(gè)之前,您首先需要包含聲明每個(gè)單獨(dú)模塊內(nèi)容的頭文件。

你幾乎總是最終使用:

  • 核心部分,這里定義了圖書(shū)館的基本構(gòu)建塊
  • highgui模塊,因?yàn)樗斎牒洼敵霾僮鞯墓δ?/li>
#include < opencv2 / core.hpp >
#include < opencv2 / imgcodecs.hpp >
#include < opencv2 / highgui.hpp >
#include <iostream>
#include <string>

我們還包括iostream,以方便控制臺(tái)線(xiàn)路輸出和輸入。為了避免與其他庫(kù)的數(shù)據(jù)結(jié)構(gòu)和函數(shù)名沖突,OpenCV有自己的命名空間:cv。為了避免在每個(gè)這些cv ::關(guān)鍵字之前附加需要,您可以使用以下行在整個(gè)文件中導(dǎo)入命名空間:

using namespace cv;

對(duì)于STL庫(kù)也是如此(用于控制臺(tái)I / O)?,F(xiàn)在,我們分析一下主要功能。我們開(kāi)始確保從命令行獲取有效的圖像名稱(chēng)參數(shù)。否則默認(rèn)拍照:“HappyFish.jpg”。

    String imageName( "../data/HappyFish.jpg" ); // by default
    if( argc > 1)
    {
        imageName = argv[1];
    }

然后創(chuàng)建一個(gè)Mat對(duì)象,它將存儲(chǔ)加載的圖像的數(shù)據(jù)。

    Mat image;

現(xiàn)在我們調(diào)用加載第一個(gè)參數(shù)(argv [1])指定的映像名稱(chēng)的cv :: imread函數(shù)。第二個(gè)參數(shù)指定了我們想要的圖像的格式。這可能是:

  • IMREAD_UNCHANGED(<0)按原樣加載圖像(包括alpha通道(如果存在)
  • IMREAD_GRAYSCALE(0)將圖像作為強(qiáng)度加載
  • IMREAD_COLOR(> 0)以RGB格式加載圖像
    image = imread( imageName, IMREAD_COLOR ); // Read the file
注意
OpenCV支持圖像格式Windows位圖(bmp),便攜式圖像格式(pbm,pgm,ppm)和Sun光柵(sr,ras)。在插件的幫助下(您需要指定使用它們,如果您建立自己的庫(kù),但是在我們出貨的包中,默認(rèn)情況下)您也可以加載像JPEG(jpeg,jpg,jpe),JPEG 2000(jp2 - 代號(hào)為CMake的Jasper),TIFF文件(tiff,tif)和便攜式網(wǎng)絡(luò)圖形(png)。此外,OpenEXR也是一種可能性。

檢查圖像數(shù)據(jù)是否正確加載后,我們要顯示圖像,因此我們使用cv :: namedWindow函數(shù)創(chuàng)建一個(gè)OpenCV窗口。創(chuàng)建OpenCV后,它們將自動(dòng)進(jìn)行管理。為此,您需要指定其名稱(chēng),以及如何從大小角度處理其包含的圖像的更改。可能是:

  • 如果不使用Qt后端,WINDOW_AUTOSIZE是唯一支持的。在這種情況下,窗口大小將占據(jù)顯示的圖像的大小。不允許調(diào)整大?。?/li>
  • WINDOW_NORMAL在Qt你可以使用它來(lái)允許窗口調(diào)整大小。圖像將根據(jù)當(dāng)前窗口大小自行調(diào)整大小。通過(guò)使用| 操作員還需要指定是否希望圖像保持其寬高比(WINDOW_KEEPRATIO)(WINDOW_FREERATIO)。
    namedWindow( "Display window", WINDOW_AUTOSIZE ); // Create a window for display.

最后,要使用新的圖像更新OpenCV窗口的內(nèi)容,請(qǐng)使用cv :: imshow函數(shù)。指定要更新的OpenCV窗口名稱(chēng)和此操作期間要使用的映像:

    imshow( "Display window", image );                // Show our image inside it.

因?yàn)槲覀兿M覀兊拇翱诒伙@示直到用戶(hù)按下一個(gè)鍵(否則程序會(huì)結(jié)束太快),所以我們使用cv :: waitKey函數(shù),其唯一的參數(shù)是等待用戶(hù)輸入需要多長(zhǎng)時(shí)間毫秒)。零意味著永遠(yuǎn)等待。

    waitKey(0); // Wait for a keystroke in the window

結(jié)果

  • 編譯代碼,然后運(yùn)行可執(zhí)行文件,將圖像路徑作為參數(shù)。如果你在Windows上,可執(zhí)行文件當(dāng)然也會(huì)包含一個(gè)exe擴(kuò)展名。當(dāng)然確保圖像文件靠近你的程序文件。
    ./DisplayImage HappyFish.jpg
  • 你應(yīng)該得到一個(gè)漂亮的窗口,如下所示:

OpenCV 圖像加載和顯示


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)