MENU

OpenCVで画像サイズを変更する方法2つ

直接比率を指定する方法


#include <iostream>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

int main(int argc, const char* argv[])
{
  // 入力画像
  cv::Mat src = cv::imread("src.jpg", 1);
  if(src.empty()) std::cout << "not found" << std::endl;
  
  // 出力画像
  cv::Mat dst;

  // 画像リサイズ
  cv::resize(src, dst, cv::Size(), 0.4, 0.4);
  
  cv::namedWindow("RESIZE", cv::WINDOW_AUTOSIZE);
  cv::imshow("RESIZE", dst);
    
  cv::waitKey(0);
}

単純に画像サイズを変更する方法です。

アルゴリズムを使う


#include <iostream>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

int main(int argc, const char* argv[])
{
  // 入力画像
  cv::Mat src = cv::imread("src.jpg", 1);
  if(src.empty()) std::cout << "not found" << std::endl;
  
  // 出力画像
  cv::Mat dst = cv::Mat::ones(src.rows * 0.4, src.cols * 0.4, CV_8U);

  // 画像リサイズ
  cv::resize(src, dst, dst.size(), cv::INTER_CUBIC);
  
  cv::namedWindow("RESIZE", cv::WINDOW_AUTOSIZE);
  cv::imshow("RESIZE", dst);
    
  cv::waitKey(0);
}

まず出力画像で cv::Mat::ones() 関数を使ってリサイズ後の画像サイズを指定します。次に cv::resize() 関数でリサイズしています。このとき、cv::INTER_CUBIC を指定していますが、これはいくつかあるリサイズアルゴリズムのうちの一つです。