【C++】OpenCVとImageMagickの相互変換

OpenCVとMagick++相互変換

今回はOpenCVのcv::MatクラスとImageMagickのMagick::Imageクラスの相互変換についてです。

1. cv::Matクラス→Magic::Imageクラス

以下の画像をOpenCVで読み込み、ImageMagickに入力して保存するコードです。

#include<iostream>
#include<opencv2/opencv.hpp>
#include<Magick++.h>

int main(void){
	cv::Mat mat_img = cv::imread("shimons_labo.png");
	int w = mat_img.cols;
	int h = mat_img.rows;

	try {
		Magick::Image image;

		image.read(w, h, "BGR", Magick::CharPixel, mat_img.data);
		image.write("shimons_labo_magick.png");
	}
	catch (Magick::Exception& error_)
	{
		std::cout << "Caught exception: " << error_.what() << std::endl;
	}

	return 0;
}

2. Magic::Imageクラス→cv::Matクラス

ImageMagickで画像を読み込み、cv::Matに変換して保存するコードはこちらです。

#include<iostream>
#include<opencv2/opencv.hpp>
#include<Magick++.h>

int main(void){
	Magick::Image image;
	try {
		image.read("shimons_labo.png");
		int w = image.columns();
		int h = image.rows();
	
		cv::Mat mat_img(h, w, CV_8UC3);

		image.write(0, 0, w, h, "BGR", Magick::CharPixel, mat_img.data);

		cv::imwrite("shimons_labo_mat.png", mat_img);
	}
	catch (Magick::Exception& error_)
	{
		std::cout << "Caught exception: " << error_.what() << std::endl;
	}

	return 0;
}

3. HEICフォーマットの画像をOpenCVへ入力

iPhoneで撮影された画像がHEICフォーマットになっている場合があると思いますが、このフォーマットは2025年11月現在OpenCVに対応しておらず読み込むことができません。

しかし、ImageMagickで読み込みOpenCVへ変換することによりHEICフォーマットの画像をOpenCVで扱うことが可能です。

4. 参考サイト

OpenCV 2.2 C++ リファレンス
http://opencv.jp/opencv-2svn/cpp/

Magick++
https://imagemagick.org/Magick++/Documentation.html

コメント

タイトルとURLをコピーしました