C++とOpenCVを使って画像を回転させる方法
OpenCVによる画像回転の基本
OpenCVに組み込まれた関数を使用すれば、画像の回転は非常に簡単な作業です。画像を回転させるには、「highgui.hpp」と「imgproc.hpp」の2つのヘッダーファイルを読み込みます。本プログラムでは、これらに加えて画像の回転処理に関わる複数の関数を紹介します。
以下のプログラムは、C++でOpenCVを使用して画像を回転させる方法を示しています。
サンプルコード
#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
Mat before_rotation = imread("bright.jpg");//画像を行列(Mat)に読み込む//
namedWindow("BeforeRotation");//元画像を表示するためのウィンドウを宣言//
imshow("BeforeRotation", before_rotation);//回転前の画像を表示//
namedWindow("AfterRotation");//回転後の画像を表示するウィンドウを宣言//
int Rotation = 180;//回転角度を初期化//
createTrackbar("Rotation", "AfterRotation", &Rotation, 360);//トラックバーを作成//
int Height = before_rotation.rows / 2;//行方向の中間点を取得//
int Width = before_rotation.cols / 2;//列方向の中間点を取得//
while (true) {
Mat for_Rotation = getRotationMatrix2D(Point(Width, Height), (Rotation - 180), 1);//2D回転用のアフィン変換行列を取得//
Mat for_Rotated;//回転後の画像を格納する行列を宣言//
warpAffine(before_rotation, for_Rotated, for_Rotation, before_rotation.size());//アフィン変換を適用//
imshow("AfterRotation", for_Rotated);//回転後の画像を表示//
int termination = waitKey(30);//回転効果を作り出すために30ミリ秒待機//
if (termination == 27){//Escキーが押されたら終了//
break;
}
}
return 0;
}コードの解説
このプログラムで使用している主な関数は以下の通りです。
- imread():指定したパスから画像を読み込み、Matオブジェクトに格納します。
- namedWindow():画像を表示するためのウィンドウを作成します。
- createTrackbar():「AfterRotation」ウィンドウ上にトラックバー(スライダー)を作成し、マウス操作で回転角度を動的に変更できるようにします。
- getRotationMatrix2D():回転の中心点・角度・スケールを指定して、2D回転用のアフィン変換行列を計算します。ここでは画像の中心を回転軸としています。
- warpAffine():取得したアフィン変換行列を画像に適用し、実際に回転を行います。
- waitKey(30):30ミリ秒ごとにキー入力をチェックし、滑らかな回転アニメーションを実現します。Escキー(ASCIIコード27)が押されるとループを抜けて終了します。
トラックバーの初期値は180に設定されているため、「(Rotation - 180)」という式によってプログラム開始時の回転角は0度となります。スライダーを動かすことで、-180度から+180度までの範囲で画像を自由に回転させることができます。
実行結果

プログラムを実行すると、元画像と回転後の画像がそれぞれ別のウィンドウに表示されます。トラックバーを操作すると、回転後の画像がリアルタイムに更新されることを確認できます。
-
C++とOpenCVで画像を読み込んで表示する方法を徹底解説
この記事では、C++でOpenCVを使用して画像を読み込み、表示する方法について詳しく解説します。OpenCVで画像の読み込みや表示を行うには、以下のような関数やデータ構造が必要になります。 画像処理に必要な基本要素 Mat(マトリクス) Matは関数ではなく、データ構造の一種である変数型です。C++におけるint型やchar型、string型のように、MatはOpenCV独自の変数型であり、画像を格納するための行列(マトリクス)データ構造を作成します。プログラム内で「Mat myImage;」と記述した場合、「myImage」という名前の行列変数を宣言していることになります。 name
-
JavaとOpenCVで画像を回転させる方法をわかりやすく解説
JavaでOpenCVを使って画像を回転させたい場合、ImgprocクラスのwarpAffine()メソッドを使用します。このメソッドは、指定された画像にアフィン変換(平行移動・回転・拡大縮小などの線形変換)を適用するためのものです。warpAffine()メソッドのパラメータwarpAffine()メソッドは、以下の引数を受け取ります。変換元の画像(src)、変換先の画像(dst)、変換行列(M)を表す3つのMatオブジェクト出力画像のサイズを表す整数値(Sizeオブジェクト)画像を回転させる手順画像を回転させるには、まずgetRotationMatrix2D()メソッドを使って回転行列を作