Article header library 129605  1

[画像合成ソフト製作] 第2話 基本課題にチャレンジ

こんにちは、MIYA です。
[画像合成ソフト製作] 第1話 画像処理のキホンを学ぶ では、ビットマップ画像について勉強しました。

ここからは実際にプログラミングによる画像処理を行っていきたいと思います。

基本課題にチャレンジ!

基本課題の内容は「ビットマップ画像の左右反転コピー」です。
早速やっていこうと思います。

どのようにすれば左右反転コピーができるのかイメージできなかったため、もう一度ビットマップファイルのデータ部分の構造を考えてみることにします。

横4032pixel、縦3024pixelの画像の場合、pixelを座標として考えると下記のようになります。

Article header library 129605 pic01  1

ビットマップファイルの構造(データ部)

つまり、0行目、1行目、2行目…と全ての行に対して、真ん中の座標を中心に左右対称になるようにpixelを入れ替えていけば、左右反転コピーが実現できることがわかりました。

左右反転コピーのイメージは付いたので、プログラムのフローチャートを作っていきます。

Article header library 129605 pic02  1

左右反転コピーのフローチャート

問題なのは、どのように画像データのRGB値を左右で入れ替えるかでした。

「箱」を用意する

空の箱(メモリ)を用意して、そこにRGBの値を一時的に格納することで、画像データのRGB値を左右で入れ替えることができると考えました。
下記に画像データの左右反転方法(step1~step3)を示します。
※今回は分かり易いように4032×3024pixelの0行目の左右一番端のRGB値を入れ替えるものを例とします。

Step1:空の箱(メモリ)にピクセル座標 (0, 0) が示すRGBの値を書き込む
Step2:ピクセル座標 (0, 0) にピクセル座標 (0, 4031) が示すRGB値を書き込む
Step3:ピクセル座標 (0, 4031) に空の箱に入れたRGB値を書き込む

Article header library 129605 pic03  1

画像データの左右反転方法

うん、これだとうまくいくはず!

コーディングしてみる!

どのように左右反転するかイメージができたところでコーディングしていきたいと思います。
C言語の基礎勉強で学んだことを発揮してみせます!

わからないところは先輩に聞きながらどんどん書き進めていきます…

Article header library 129605 pic04  1

左右反転コピーのコード

・・・頑張った。
かなり長くなりましたが完成です!

実行してみる!

コーディングを終え、いよいよ実行のとき!
果たして上手くいくのか!?

ちなみに、今回の開発環境は下記の通りになっています。
  • Windows, v7
  • Cygwin
  • gcc

それでは実行します・・・
Cygwinというツール上で下記のように記入し、Enterを押します。

Article header library 129605 pic05  1

Cygwin画面

Enter!

さあ、どうなる!?

Article header library 129605 pic06  1

実行結果

で、できた!反転成功!!
めちゃくちゃ嬉しい。
思った通りに動くってこんなに嬉しいんですね。
感動した!

ちなみにデバッグは、ほとんどなしでいけました!
・・・ポテンシャルあるな俺。

さて、次回からはいよいよ製作実習の課題に突入します。
逃げちゃ駄目だ、逃げちゃ駄目だ、逃げちゃ駄目だ・・・

ということで次回は [画像合成ソフト製作] 第3話 クロマキー合成にチャレンジ です。お楽しみに!

2018年度 翔け新人!エンジニア奮闘記はこちら

翔け新人!エンジニア奮闘記とは?

マクニカのエンジニアが新人時代に研修中に感じた疑問、制作実習での奮闘、発生したトラブルを解決するまでのフローなど紹介します。個性あふれる新人たちが奮闘から会得した実用的なノウハウを業務にご活用ください。

翔け新人!エンジニア奮闘記 著者紹介はこちら

関連タグ