Article header library 129517  3

[画像合成ソフト製作] 第1話 画像処理のキホンを学ぶ

ソフトウェアにチャレンジ!

はじめまして。2018年度入社の MIYA です。
本記事では新人エンジニアの教育訓練である製作実習について記します。

私の製作実習は過去の先輩社員とは異なり、ソフトウェア(C言語)の習得を目的に実施されました。このため、私に与えられた課題は「C言語で画像データ処理プログラムを作成する」というものでした。

製作実習の課題
  • C言語で画像データ処理プログラムを作成する

要求事項
  • フォトフレーム機能(写真のクロマキー合成)
  • チャレンジ課題を追加する(独自機能を盛り込む)


C言語で画像データ処理?
クロマキー合成?
モノをつくらないの?

過去のエンジニア奮闘記 を見ても、ソフトウェアの課題が出た様子もなし。先輩社員が皆、モノづくり未経験で苦労しているのに、過去に例のないソフトウェアの製作実習。もちろん私はC言語なんて全くの素人。言葉も分からない。この先どうなるか不安な気持ちでいっぱいです…

製作実習の前に、しっかり基本をマスター

C言語の基礎を学ぶ

ソフトウェア未経験の私は、製作実習に入る前に基本から教わります。
C言語の基礎をみっちりと2ヶ月間。ソフトウェアに慣れだしたころ、ふと、思いました。

簡単なプログラムは書けるようになったけど、画像データの処理プログラムってどうやるの?
いまの知識で「C言語で画像データ処理プログラムを作成する」というイメージが全く湧きません。

Article header library 129517 pic01  1

C言語を学んでいる様子

基本課題をクリアする

C言語を理解したところで、製作実習前にもう一段階、基本課題が与えられました。

基本課題
  • ビットマップ画像の左右反転コピー

基本課題をクリアした後に製作実習がはじまるのですが、…えっ、どうやってやるの?
調べてみると、鏡のように画像を反転させれば良いことが分かりました。

Article header library 129517 pic02  1

ビットマップ画像の左右反転コピー

まずは「基本課題」をクリアする

与えられた基本課題は「ビットマップ画像の左右反転コピー」です。

ビットマップと言う言葉は良く聞きますが、そもそも「ビットマップ画像とは何ぞや?」ということから調べることにしました。

ビットマップ画像とは何ぞや?

ビットマップ画像とは簡単に言うと、点の集まりで構成されている画像のことです。
さらに、この点をピクセルと呼び、ピクセルは、赤、緑、青の3色の組み合わせによっていろんな色を表現することができます。

  • ピクセルの色は、RGB各成分の濃淡(配合量)で表現
  • RGB各成分を256諧調(8bit)で表現
  • 256×256×256 = 16,777,216通りの色が表現可能

Article header library 129517 pic03  1

ビットマップ画像の表現

画像は数値の並びだった!

私たちは普段から何気なく画像を見ていますが、「そもそも画像ってどうやってできているんだ?」と思い、調べてみることにしました。

そもそもコンピュータが画像を認識するには、ファイル形式にしておく必要があります。ビットマップファイルはヘッダ部分と画像データ部分で構成されています。

わかりやすいようにビットマップファイルの構造イメージ図を載せます。

Article header library 129517 pic04  1

ビットマップファイルの構造イメージ図

ビットマップファイルの構造イメージがついたところで、ビットマップファイルの実際の中身はどのようになっているのかをバイナリエディタを使って見てみることにしました。

Article header library 129517 pic05  1

ビットマップファイルの構造

まさに数値の羅列!!!
このように、ビットマップファイルの中身を覗いてみると全て数値データで与えられていることがわかりました。見てると頭が痛くなりそうですね…。

では、次にこの数値データは何を表しているのか見ていきます。

Article header library 129517 pic06  2

ビットマップファイルの構造

調べると先頭から54byteはヘッダ部分の情報が数値データで与えられ、それ以降に画像データ部分の情報が数値データで与えられていることが理解できました。
また、データ部分は1pxel(24bit)毎に青、緑、赤色の色情報が数値データとして与えられていることがわかります。

ここまで知って、ようやく答えがでました。
つまり、画像処理を行うためには、この数値の羅列を変更するプログラムをC言語でコーディングしなければならないということです。

できるのか俺に…。

ということで次回は、[画像合成ソフト製作] 第2話 基本課題にチャレンジ です。お楽しみに!

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

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

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

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

関連タグ