見出し画像

画像処理やってみる(グレースケール変換)

こんにちは、えふけーです
さっそく画像検出!とはいかないですよねー、知ってました、、、w
自分なりに画像検出をざっくり調べてみたところ、以下の知識が必要かなと感じました

①画像ファイルの読み込み、出力
②画像処理の基礎知識
➂機械学習アルゴリズム
その他etc…(たぶんいっぱい)

いやざっくりしすぎぃ!しかも機械学習って明らかにラスボス感凄いじゃん
これ僕本当に開発なんぞできるんですかね、、、まぁやりますが!

実際にグレースケール変換やってみたよ

C言語で画像処理プログラミングに挑戦してみよう! | だえうホームページ (daeudaeu.com)
今回はとりあえず画像処理を体験してみようと思い上のwebサイトを参考に唯一大学で学んだC言語でグレースケール変換をしてみます

グレースケールとは各画素がグレーの濃淡で表される画像です
画像の各画素の RGB 輝度値が同じ(R=G=B)だとグレースケール画像になるので今回は全座標のRGB輝度の平均をとってカラー画像を単純化してみました

とりあえずpng画像を入出力したいのでlibpng という PNG 画像ファイルを扱うためのライブラリをこのurlからインストールしました
この libpng を利用することで、C言語などのプログラムから簡単に JPNG 画像を読み込んだり、PNG 画像を作成したりできるようになります
僕はzipとtar.gzの解凍の違い分からなくてこの時点でエラー吐きまくってなえてましたね(笑

【C言語】画像をグレースケール化 | だえうホームページ (daeudaeu.com)
よりグレースケール変換の関数を引用してきました
凄いめんどくさそうですがやってることはビットマップデータ(0,0)~(m,n)のRGBを平均化してgreyに格納しすべてのRGBをgreyにすることでR=G=Bにしてます、その繰り返しですね

/* ここからグレースケール変換 */ for(n = 0; n < bitmap.height; n++){ for(m = 0; m < bitmap.width; m++){ /* (m,n)座標のRGBの輝度値を取得 */ r = bitmap.data[bitmap.ch * (m + n * bitmap.width) + 0]; g = bitmap.data[bitmap.ch * (m + n * bitmap.width) + 1]; b = bitmap.data[bitmap.ch * (m + n * bitmap.width) + 2]; /* 輝度値の平均を計算 */ gray = (r + g + b) / 3; /* (m,n)座標のRGBの輝度値全てにgrayを格納 */ bitmap.data[bitmap.ch * (m + n * bitmap.width) + 0] = gray; bitmap.data[bitmap.ch * (m + n * bitmap.width) + 1] = gray; bitmap.data[bitmap.ch * (m + n * bitmap.width) + 2] = gray; } } /* ここまでグレースケール変換 */

なんやかんやヘッダー関連でつまずきながらもで成功しました
エラーわかんなくて3時間くらいかかったかな、コード丸パクリなのに、、、

このかわいいかわいいまめひなたちゃんが
白日のmvみたいになっちゃった

まぁとりあえず画像処理の体験だけでもできて楽しかったです
やはり形に見えて分かるのが画像処理プログラムの面白さですよね、コンパイル通って実行できた時は思わず感動してしまいました
機械学習とかはCじゃなくてpythonとかでやってみようかななんて画策中です、道が長すぎるよ、、、でも自分で学ぶのは楽しい!

皆さんもグレースケール変換で遊んでみてください、詳しい解説はこちらで見れます!僕が要約するまでもなく分かりやすい記事です
これからも適度に頑張ります!

この記事が気に入ったらサポートをしてみませんか?