画像をリサイズする

今回はC++とOpenCVで画像をリサイズする方法の紹介です。PythonとOpenCVでのリサイズはこちらです

imshowで表示したら画像が大きすぎた。。。。
画像が大きすぎて処理が重い。。。
resize関数でリサイズできます!

imshowの直前で縮小を行えば表示される画像を小さくすることができます。解析処理の後で表示する画像を縮小することに問題はありませんが、解析処理の前で縮小処理を行うと、処理対象となる画素数が減るためにプログラムの速度は向上しますが、低解像度の画像を解析することになるため精度が低下する場合があるので注意が必要です。下の例では、imgというMatを縦横0.5倍に縮小しています。

Mat img;
     :
     :
     :
resize(img, img, cv::Size(), 0.5, 0.5);
imshow("Window", img);

 

次の例では、imgというMatを横を0.5倍に、縦を2倍にしています。このように拡大することもできます。拡大縮小率を指定する順番が、横・縦の順になっていることに注意してください。

Mat img;
     :
     :
     :
resize(img, img, cv::Size(), 0.5, 2);
imshow("Window", img);

 

次の例は、imgというMatを縦横ともに500pixelの正方形になるように変形するものです。

Mat img;
     :
     :
     :
resize(img, img, cv::Size(), 500.0/img.cols ,500.0/img.rows);
imshow("Window", img);

 

次の例は、imgというMatの横が500pixelとなるように縦横等倍率で変形する場合です。

Mat img;
     :
     :
     :
resize(img, img, cv::Size(), 500.0/img.cols ,500.0/img.cols);
imshow("Window", img);

 

Pythonでは次のようにリサイズします。

import cv2
import numpy as np
img = cv2.imread("sample.jpg")
h=300
w=400
img2 = cv2.resize(img,(h,w))