【C++】 画像ファイルを読み込む簡単な方法

【C++】 画像ファイルを読み込む簡単な方法

はじめに

C++で画像ファイルを読み込む方法はいくつかあります。本記事では、以下の方法を紹介します。

  • OpenCVを使う方法
  • stb_image.hを使う方法
  • fstreamを使ってBMP画像を読み込む方法

OpenCVを使った画像の読み込み

OpenCVは強力な画像処理ライブラリで、多くのフォーマットの画像を簡単に読み込むことができます。

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    cv::Mat image = cv::imread("image.jpg");
    if (image.empty()) {
        std::cerr << "画像を読み込めませんでした。" << std::endl;
        return -1;
    }
    cv::imshow("表示", image);
    cv::waitKey(0);
    return 0;
}

このコードはOpenCVを使って画像を読み込み、表示します。

stb_image.hを使った画像の読み込み

stb_image.hはシンプルな画像読み込み用のヘッダファイルです。

#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
#include <iostream>

int main() {
    int width, height, channels;
    unsigned char* img = stbi_load("image.png", &width, &height, &channels, 0);
    if (!img) {
        std::cerr << "画像を読み込めませんでした。" << std::endl;
        return -1;
    }
    std::cout << "幅: " << width << " 高さ: " << height << " チャンネル: " << channels << std::endl;
    stbi_image_free(img);
    return 0;
}

この方法は単純で依存関係が少なく、軽量です。

fstreamを使ったBMP画像の読み込み

BMPフォーマットはヘッダ情報がシンプルなので、fstreamを使って直接読み込むことができます。

#include <fstream>
#include <iostream>
#include <vector>

#pragma pack(1)
struct BMPHeader {
    char signature[2];
    int fileSize;
    int reserved;
    int dataOffset;
};

struct DIBHeader {
    int headerSize;
    int width;
    int height;
    short planes;
    short bitsPerPixel;
    int compression;
    int imageSize;
    int xPixelsPerMeter;
    int yPixelsPerMeter;
    int colorsUsed;
    int importantColors;
};

int main() {
    std::ifstream file("image.bmp", std::ios::binary);
    if (!file) {
        std::cerr << "ファイルを開けませんでした。" << std::endl;
        return -1;
    }
    BMPHeader bmpHeader;
    DIBHeader dibHeader;
    file.read(reinterpret_cast(&bmpHeader), sizeof(bmpHeader));
    file.read(reinterpret_cast(&dibHeader), sizeof(dibHeader));
    std::cout << "BMP画像の幅: " << dibHeader.width << " 高さ: " << dibHeader.height << std::endl;
    file.close();
    return 0;
}

このコードはBMP画像のヘッダ情報を解析して、画像の幅と高さを取得します。

まとめ

本記事では、C++で画像を読み込む方法として、以下の3つを紹介しました。

  • OpenCVを使う(高機能で多機能)
  • stb_image.hを使う(シンプルで軽量)
  • fstreamを使う(BMPフォーマットに限定されるが、仕組みを理解しやすい)

用途に応じて適切な方法を選択してください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です