18
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenCVを使ってドット絵をテイストそのままに拡大してみた

Last updated at Posted at 2014-04-30

ドット絵の画像を拡大すると、ぼやけてしまいドット絵のテイストがなくなってしまいます。
hero.png big_hero.png

これはバイリニア補間のような、周辺の画素値を用いて滑らかに画素が並ぶよう補間するアルゴリズムを用いているためです。
一般的な画像の拡大には効果的なのですが、ドット絵のテイストを保持したまま拡大したい場合には適しません。
ドット絵のテイストを保持したまま拡大すると以下のようになります。

output.png

このドット絵のテイストを保持したまま画像を拡大するプログラムをOpenCVを用いて作りました。

@mori0091さんのご指摘により、非常に簡潔なコードとなりました。(2014/4/30修正)

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

int main(int argc, char *argv[])
{
  using namespace cv;

  // 拡大の倍率
  const int zoom_factor = 10;

  // 入力画像ファイル
  const Mat src_img = imread("sample.png");

  // 出力画像ファイル
  Mat dst_img;

  resize(src_img, dst_img, Size(), zoom_factor, zoom_factor, INTER_AREA);

  // 出力画像の保存
  imwrite("output.png", dst_img);

  // 出力画像の表示
  imshow("output", dst_img);
  waitKey(0);
}

アルファチャンネル付きのPNG画像を拡大する場合は、画像を読み込む際にアルファチャンネルの値も含めて読み込む指定をする必要があります。
プログラムは以下のようになります。

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

int main(int argc, char *argv[])
{
  using namespace cv;

  // 拡大の倍率
  const int zoom_factor = 10;

  // 入力画像ファイル
  const Mat src_img = imread("sample.png", -1);

  // 出力画像ファイル
  Mat dst_img;

  resize(src_img, dst_img, Size(), zoom_factor, zoom_factor, INTER_AREA);

  // 出力画像の保存
  imwrite("output.png", dst_img);

  // 出力画像の表示
  imshow("output", dst_img);
  waitKey(0);
}

ちなみにPhotoshopで、イメージ → サイズ変更 → 画像解像度 を選択し、ニアレストネイバー法を選んで解像度を変えても同じことができます。

上記で使用したドット絵は全てREFMAPさんよりお借りしました。

18
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?