OpenCV イメージの読み込みと表示

OpenCV イメージの読み込みと表示

画像をロードします(cv::imreadを使用)

OpenCV という名前のウィンドウを作成します (cv::namedWindow を使用)

OpenCV ウィンドウに画像を表示 (cv::imshow を使用) **

#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;
}

説明する

OpenCV 2 には複数のモジュールがあります。それぞれが異なる領域またはメソッドを処理する責任があります。これは、これらのチュートリアル自体のユーザー ガイドの構造で確認できます。これらのいずれかを使用するには、まず、個々のモジュールの内容を宣言するヘッダー ファイルをインクルードする必要があります。

ほとんどの場合、最終的には次のものを使用することになります。

ライブラリの基本的な構成要素であるコア部分
である highgui モジュールは、入出力操作の関数が含まれているため、ここで定義されます。

#include < opencv2 / core.hpp >
#include < opencv2 / imgcodecs.hpp >
#include < opencv2 / highgui.hpp >
#include <iostream>
#include <string>

コンソールラインの出力と入力を容易にするための iostream も含まれています。データ構造と関数名の他のライブラリとの競合を避けるために、OpenCV には独自の名前空間 cv があります。これらの各 cv:: キーワードの前に追加する必要を避けるために、次の行を使用してファイル全体に名前空間をインポートできます。

using namespace cv;

STL ライブラリ (コンソール I/O 用) にも同じことが当てはまります。それでは、主な機能を分析してみましょう。まず、コマンド ラインから有効なイメージ名の引数を取得できるようにします。それ以外の場合は、デフォルトで写真を撮ります:「HappyFish.jpg」。

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

次に、読み込んだ画像のデータを保存する Mat オブジェクトを作成します。

Mat image;

次に、最初の引数 (argv[1]) で指定されたイメージ名をロードする cv::imread 関数を呼び出します。2 番目のパラメータは、必要な画像の形式を指定します。これは次のようなものかもしれません:

IMREAD_UNCHANGED(<0)按原样加载图像(包括alpha通道(如果存在)
IMREAD_GRAYSCALE(0)将图像作为强度加载
IMREAD_COLOR(> 0)以RGB格式加载图像
    image = imread( imageName, IMREAD_COLOR ); // Read the file

予防

OpenCV は、画像形式 Windows ビットマップ (bmp)、ポータブル画像形式 (pbm、pgm、ppm)、および Sun ラスター (sr、ras) をサポートします。プラグインの助けを借りて (独自のライブラリを構築する場合はプラグインを使用するように指定する必要がありますが、デフォルトで出荷されるパッケージに含まれています)、JPEG (jpeg、jpg、jpe)、JPEG 2000 (jp2 - Jasper、コードネーム CMake)、TIFF ファイル (tiff、tif)、およびポータブル ネットワーク グラフィックス (png)。また、OpenEXR も可能です。
画像データが正しく読み込まれたことを確認したら、画像を表示したいので、 cv::namedWindow 関数を使用して OpenCV ウィンドウを作成します。これらは OpenCV の作成後に自動的に管理されます。これを行うには、その名前と、それに含まれる画像のサイズ変更の処理方法を指定する必要があります。多分:

WINDOW_AUTOSIZE は、Qt バックエンドが使用されない場合にのみサポートされます。この場合、ウィンドウ サイズは表示される画像のサイズを占めます。サイズ変更は禁止です!
WINDOW_NORMAL Qt では、これを使用してウィンドウのサイズを変更できます。画像は現在のウィンドウ サイズに応じて自動的にサイズ変更されます。| 演算子を使用すると、画像の縦横比を維持するかどうか (WINDOW_KEEPRATIO) (WINDOW_FREERATIO) を指定する必要もあります。

namedWindow( "Display window", WINDOW_AUTOSIZE ); // Create a window for display.

やっと

OpenCV ウィンドウのコンテンツを新しいイメージで更新するには、 cv::imshow 関数を使用します。更新する OpenCV ウィンドウの名前と、この操作中に使用するイメージを指定します。

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

ユーザーがキーを押すまでウィンドウを表示したいので (そうしないとプログラムがすぐに終了してしまいます)、cv::waitKey 関数を使用します。この関数の唯一のパラメーターはユーザー入力を待つ時間 (ミリ秒単位) です。ゼロは永遠に待つことを意味します。

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

結果

コードをコンパイルし、画像パスを引数として使用して実行可能ファイルを実行します。Windows を使用している場合、実行可能ファイルには当然 exe 拡張子も含まれます。もちろん、イメージ ファイルがプログラム ファイルの近くにあることを確認してください。

./DisplayImage HappyFish.jpg

次のような素敵なウィンドウが表示されるはずです:
OpenCV 画像の読み込みと表示
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_41704415/article/details/123796034