今回は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/





コメント