今現在、C言語による画像の処理について学んでいます。
最終目的は大漁の画像、1枚1枚の色を識別して、ある色なら0、あるい色なら1といった具合にテキストファイルに出力することを目標としています。
"大漁の画像データ" とは、下記URLの動画の全フレームを画像に変換したものです。(画像への変換はフリーソフトを利用します)
動画の内容は、ストロボの点灯、消灯をコントロールすることでアニメーション的な動作をさせています。
具体的には、
変換した画像のストロボが点滅している部分のみを対象とし、10×25に分割。
点灯(白)と消灯(黒)を識別し、それぞれ0、1というデータとしてテキストファイルに出力したいと思っております。
(ストロボの点灯に関係のない余白はプログラムで簡単に除外出来るのであればしたいと思いますが、ややこしくなるようでしたら編集ソフトで動画のトリミングを行うつもりです)
これらの目標を成し遂げるために何から勉強すれば良いのか分からず、様々なサイトを巡ってみました。
そして、こちらのサイトで今現在勉強しています。
http://pen.agbi.tsukuba.ac.jp/~RStiger/ ... 6%FE%CC%E7
こちらのサイトでは、linux環境を対象としておりプログラムはC言語であるものの、わざわざ1枚1枚の画像をコマンドラインから入力して処理をするという方法が紹介されています。
しばらくの間、linux環境をPcに導入した上でコマンドラインからの実行を行って来ました。
しかし私は、数万に及ぶフレーム数の画像をすべて処理しなくてはならないため、このサイトで学んでいても結果には繋がらない気がしています。
例えば、このサイトの画像を切り出してみようという単元では、画像の読み込みに
fread 関数を利用していますが stdin (標準入力)からデータを読み込んでいます。
そうではなく、画像データをプログラム上で直接指定し、ファイルをオープンしたところで画像を認識。
テキストファイルに書き込み、画像データをクローズ、テキストファイルをクローズ。
このような処理をしたいと思っております。
ふと、テキストファイルやバイナリファイルの読み書きのプログラムを思い出しましたが、画像データを読み込み、画像を書き出すとなると、テキストファイルの読み書きなどとは話が変わってくるのではないかと思います。
画像処理が全くの初心者のため、手が付けられず困っております。
実は、この画像処理の学習はLED掲示板を点滅させるためのデータ作りに過ぎず、あまり時間に余裕がありません。
少しでも具体的なお話をお聞かせいただけると幸いです。
よろしくおねがいします。
[環境]
C言語
Windows 7
VC++ 2008
標準のC言語での画像の読み込み、編集方法
Re: 標準のC言語での画像の読み込み、編集方法
標準入出力だと一見、大量のファイル処理に向かないように思えますが、
ちょっとコマンドを工夫すればバッチ処理ができます。
Linuxの場合の例
カレントディレクトリの raw ファイル全てに対して処理を実行します ですから、freadでファイルから直接読み込むかどうかは本質的な問題ではないと思います。
ボトルネックになるのは画像処理の部分でしょうから、ファイル列挙の処理などはわざわざCで書く利点がないです。
ちなみにfopenの時にバイナリモードで開くということ以外は、
バイナリファイルとテキストファイルの扱いに大きな違いはありません。
ちょっとコマンドを工夫すればバッチ処理ができます。
Linuxの場合の例
カレントディレクトリの raw ファイル全てに対して処理を実行します ですから、freadでファイルから直接読み込むかどうかは本質的な問題ではないと思います。
ボトルネックになるのは画像処理の部分でしょうから、ファイル列挙の処理などはわざわざCで書く利点がないです。
ちなみにfopenの時にバイナリモードで開くということ以外は、
バイナリファイルとテキストファイルの扱いに大きな違いはありません。
Re: 標準のC言語での画像の読み込み、編集方法
"大漁の画像"とは、”大量の画像”のことでしたか。
>そうではなく、画像データをプログラム上で直接指定し、ファイルをオープンしたところで画像を認識。
>テキストファイルに書き込み、画像データをクローズ、テキストファイルをクローズ。
>このような処理をしたいと思っております。
FindFirstFile, FindNextFile, FindCloseFile を使います。
例:
http://nienie.com/~masapico/api_FindFirstFile.html
FindFirstFile ファイルの検索
あたっしゅ
なにごとも、やってみることが大切で、時間に余裕が出来たら、linux のコマンドラインにも挑戦してみてください。
>そうではなく、画像データをプログラム上で直接指定し、ファイルをオープンしたところで画像を認識。
>テキストファイルに書き込み、画像データをクローズ、テキストファイルをクローズ。
>このような処理をしたいと思っております。
FindFirstFile, FindNextFile, FindCloseFile を使います。
例:
http://nienie.com/~masapico/api_FindFirstFile.html
FindFirstFile ファイルの検索
あたっしゅ
なにごとも、やってみることが大切で、時間に余裕が出来たら、linux のコマンドラインにも挑戦してみてください。
VTuber:
[香車]東上☆Aho(暎帆)☆海美
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
[香車]東上☆Aho(暎帆)☆海美
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
-
- 記事: 91
- 登録日時: 14年前
Re: 標準のC言語での画像の読み込み、編集方法
>>h2so5様
回答有難うございます。
実行してみたところ、エラーが出てしまいました。
" token `;' のあたりにシンタックスエラー "
という内容です。
原因が分かりません…。
検索してみると、環境に依存するエラーであるような記述が有りましたが対処できずにいます。
それと、コードの内容についてお伺いしたいのですが、 for文の構成に関しては
for 変数名 in リスト名 do コマンド done
ということで、理解出来たのですが、h2so5さんが載せて下さったコードの場合、
./cutimage < $i >'out_'$i がコマンドにあたる部分ということでしょうか?
<$i>'out_'$i は 出力する画像のファイル名を out_ としその語尾に連番を付け加えるという意味でしょうか。
詳しく載っているサイトが見つかりませんでした。
回答有難うございます。
実行してみたところ、エラーが出てしまいました。
" token `;' のあたりにシンタックスエラー "
という内容です。
原因が分かりません…。
検索してみると、環境に依存するエラーであるような記述が有りましたが対処できずにいます。
それと、コードの内容についてお伺いしたいのですが、 for文の構成に関しては
for 変数名 in リスト名 do コマンド done
ということで、理解出来たのですが、h2so5さんが載せて下さったコードの場合、
./cutimage < $i >'out_'$i がコマンドにあたる部分ということでしょうか?
<$i>'out_'$i は 出力する画像のファイル名を out_ としその語尾に連番を付け加えるという意味でしょうか。
詳しく載っているサイトが見つかりませんでした。
けろけろにゃー (」・ω・)」うー!
-
- 記事: 91
- 登録日時: 14年前
Re: 標準のC言語での画像の読み込み、編集方法
>>あたっしゅ様
回答有難うございます
すみません、大漁は大量の誤りです。
h2so5様が教えて下さったコマンドから取り掛かっており、まだ実行できていませんが、取り急ぎ内容だけ目を通してみました。
とても便利そうな機能に見えました。
少し外出しますので、また後ほど挑戦してみます。
ありがとうございます。
回答有難うございます
すみません、大漁は大量の誤りです。
なるほど。このような方法があるのですね。あたっしゅ さんが書きました:FindFirstFile, FindNextFile, FindCloseFile を使います
h2so5様が教えて下さったコマンドから取り掛かっており、まだ実行できていませんが、取り急ぎ内容だけ目を通してみました。
とても便利そうな機能に見えました。
少し外出しますので、また後ほど挑戦してみます。
ありがとうございます。
けろけろにゃー (」・ω・)」うー!
Re: 標準のC言語での画像の読み込み、編集方法
正しいのはこちらです。失礼しました
変数iに入っているのは番号ではなくて、ファイル名です。
入力が abc.raw だったら out_abc.raw として出力します。
スクリプトについては、このあたりが参考になるでしょう。
http://shellscript.sunone.me/for.html
http://furyo.on-air.ne.jp/linux/bash.html
変数iに入っているのは番号ではなくて、ファイル名です。
入力が abc.raw だったら out_abc.raw として出力します。
スクリプトについては、このあたりが参考になるでしょう。
http://shellscript.sunone.me/for.html
http://furyo.on-air.ne.jp/linux/bash.html
-
- 記事: 91
- 登録日時: 14年前
Re: 標準のC言語での画像の読み込み、編集方法
>>non様
今現在、シェルスクリプトの動作確認のために使っているrawファイルは連番ではありません。
>>h2so5様
ご丁寧にありがとうございます。
無事処理出来ました。
ただ、今回はルート上に raw ファイルがあったので良かったのですが、"./フォルダ1/画像ファイル.raw" を指定したい時、 " *.raw " を ./フォルダ1/*.raw " このように指定してもエラーが出てしまいました。
指定方法が間違っているのだと思いますので、添付していただいたURL先で勉強させて頂きます。
またどうしても分からなかった際は質問させていただきたいと思います。
お忙しい中ありがとうございました。
今現在、シェルスクリプトの動作確認のために使っているrawファイルは連番ではありません。
>>h2so5様
ご丁寧にありがとうございます。
無事処理出来ました。
ただ、今回はルート上に raw ファイルがあったので良かったのですが、"./フォルダ1/画像ファイル.raw" を指定したい時、 " *.raw " を ./フォルダ1/*.raw " このように指定してもエラーが出てしまいました。
指定方法が間違っているのだと思いますので、添付していただいたURL先で勉強させて頂きます。
またどうしても分からなかった際は質問させていただきたいと思います。
お忙しい中ありがとうございました。
けろけろにゃー (」・ω・)」うー!