>>かずまさん
返信ありがとうございます。
こんな方法があるんですね…!
私の計算機(Ubuntu/gcc4.7.3)では10分で実行が終わりました。(約2/3になりました!)
windowsではやっていませんが、前のプログラムが大体同じ速さで実行されたので、今回も同じくらいではないかなと思います。
此方の方が速いので、参考にさせて頂きます…!
また、わからないところがあったら質問させていただきます。
ありがとうございましたm(_ _)m
検索結果 62 件
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 実行速度を速くしたいです。
- 返信数: 9
- 閲覧数: 3435
Re: 実行速度を速くしたいです。
ほんとに何度もすみません。
ファイル出力処理を加えて作成してみたところ、15分くらいで実行できました。
これくらいなら許容範囲かなと思います。
みなさまのおかげで解決することができました。ありがとうございました。
ファイル出力処理を加えて作成してみたところ、15分くらいで実行できました。
これくらいなら許容範囲かなと思います。
みなさまのおかげで解決することができました。ありがとうございました。
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 実行速度を速くしたいです。
- 返信数: 9
- 閲覧数: 3435
Re: 実行速度を速くしたいです。
何度もすみません、今実行完了しました! だいたい11~2分くらいかかりましたが、いままで1時間以上かけても終わらなかったのでうれしいです。ありがとうございます。 これに関連して質問があるのですが(新スレッドを立てたほうがよいでしょうか…) 上のプログラムにファイル出力(Unの値を出力する)を付けたいのですが、以前より重くなってしまうのではないかと思っています。 具体的には、Unの値がある一定値以下の場合(if文)、テキストファイルに出力する。という処理を行いたいです。 ですが、プログラムを組む段階で何度か実行結果を確認したいので、1時間2時間もかかるプログラムにするのはどうしても避けたいです。...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 実行速度を速くしたいです。
- 返信数: 9
- 閲覧数: 3435
Re: 実行速度を速くしたいです。
>>h2so5さん 返信ありがとうございます。 10000000ごとの出力処理を削り、-O2オプションを使ってみました。 10分前くらいに実行し始め、現在実行中です。 前のスレッドのプログラムの実行がだいたい3~5分くらいかかっていたので、かなりかかりそうです。 >>softya(ソフト屋)さん 返信ありがとうございます。 そうなんですか…参考になりました。 これ以上速くするには、計算機の性能によることになるのでしょうか。 >>かずまさん 返信ありがとうございます。 +c がありませんが、これで一様乱数になるんでしょうか? これについてなんですが、上で示した漸化式は、たしかに一様乱数を求めるた...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 実行速度を速くしたいです。
- 返信数: 9
- 閲覧数: 3435
実行速度を速くしたいです。
前回のスレッドに答えてくださってありがとうございました。 前回のスレッドに関連した質問なので、こちら(↓)を見てくださるとうれしいです。省略してしまいすみません。 http://dixq.net/forum/viewtopic.php?f=3&t=14938 上のスレッドでは、漸化式Xn+1 = (a*Xn+c)modM a=1103515245、c=12345、M=2^31 を用いて乱数を計算していましたが、現在は M=5^13,a=2^39として Xn=a*Xn(mod M) という漸化式を用いてプログラムを作成しています。 それ以外に以前と違うのは、long long int型では桁が足...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 一様乱数の周期を求めるプログラムについて。
- 返信数: 6
- 閲覧数: 3986
Re: 一様乱数の周期を求めるプログラムについて。
>> 新々月さん
返信ありがとうございます。
動作確認もありがとうございます…!
もう一度しばらく待ってみたところ、ちゃんと止まりました。
どうやら、だめだったのはdouble型を使っていたからだったようです。
(以前は明らかにMをどれだけ過ぎても一向に止まらなかったので…)
ちゃんと確認せずに続けてしまってすみません。
h2so5さん、新々月さん、お手数をおかけしてすみませんでした。
ほんとうにありがとうございますm(_ _)m
返信ありがとうございます。
動作確認もありがとうございます…!
もう一度しばらく待ってみたところ、ちゃんと止まりました。
どうやら、だめだったのはdouble型を使っていたからだったようです。
(以前は明らかにMをどれだけ過ぎても一向に止まらなかったので…)
ちゃんと確認せずに続けてしまってすみません。
h2so5さん、新々月さん、お手数をおかけしてすみませんでした。
ほんとうにありがとうございますm(_ _)m
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 一様乱数の周期を求めるプログラムについて。
- 返信数: 6
- 閲覧数: 3986
Re: 一様乱数の周期を求めるプログラムについて。
>>h2so5さん
返信ありがとうございます。
以下の2つの環境で実行してみました。
Windowsでは、Cygwinを使っています。
どちらも、停止しませんでした。
Windows7/gcc3.4.4/Cygwin
Ubuntu/gcc4.7.3
ちなみに、コンパイルは
gcc -o sample sample.c -lm
としています。
返信ありがとうございます。
以下の2つの環境で実行してみました。
Windowsでは、Cygwinを使っています。
どちらも、停止しませんでした。
Windows7/gcc3.4.4/Cygwin
Ubuntu/gcc4.7.3
ちなみに、コンパイルは
gcc -o sample sample.c -lm
としています。
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 一様乱数の周期を求めるプログラムについて。
- 返信数: 6
- 閲覧数: 3986
Re: 一様乱数の周期を求めるプログラムについて。
>> h2so5さん
返信ありがとうございます。
確かに、整数値なのにdoubleはいやだなと思っていました。参考に致します…!
h2so5さんの書いて下さったプログラムを、上と同じ環境で実行してみたのですが、やはり周期Mでループを抜けてくれません。(実行速度はかなり速くなりました!)
なにか良い解決法はないでしょうか。。引き続きよろしくおねがいしますm(_ _)m
返信ありがとうございます。
確かに、整数値なのにdoubleはいやだなと思っていました。参考に致します…!
h2so5さんの書いて下さったプログラムを、上と同じ環境で実行してみたのですが、やはり周期Mでループを抜けてくれません。(実行速度はかなり速くなりました!)
なにか良い解決法はないでしょうか。。引き続きよろしくおねがいしますm(_ _)m
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 一様乱数の周期を求めるプログラムについて。
- 返信数: 6
- 閲覧数: 3986
一様乱数の周期を求めるプログラムについて。
一様乱数の周期を求めるプログラムを作成しています。 線形合同法を用い、初期値を1として、次に1が出てきたらループを終え、周期を出力したいです。 (漸化式Xn+1 = (a*Xn+c)modM a=1103515245、c=12345、M=2^31 を用います) プログラムを作成し、実行してみたのですが、ループが最大周期であるはずのMを超えても止まりません。 どこを直せばよいかわからず困っています。 詳しい方がおられましたら、ご教示お願いいたします。 以下に、ソースコード、処理の説明、実行環境を示します。 #include<stdio.h> #include<stdlib.h> #include...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 数値入力の例外処理について。
- 返信数: 8
- 閲覧数: 11434
Re: 数値入力の例外処理について。
>>usaoさん
返信ありがとうございます。
なるほどです。丁寧に説明してくださってありがとうございます。
もっと勉強します。
みなさんありがとうございました。
返信ありがとうございます。
なるほどです。丁寧に説明してくださってありがとうございます。
だから無限ループになってしまうんですね。usao さんが書きました: 次回のscanf()で再びこのアルファベットに出くわし→放置→また出くわし…
もっと勉強します。
みなさんありがとうございました。
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 数値入力の例外処理について。
- 返信数: 8
- 閲覧数: 11434
Re: 数値入力の例外処理について。
>>かずまさん
返信ありがとうございます。
返信が遅くなってしまい申し訳ありません。
丁寧に教えてくださってありがとうございます。
scanfは空白を読み飛ばした後数字を読み込む、というのは自分でも調べてみて理解することができました。
ですが、
scanf("%*[^\n]");
というのが、なんだかよくわかりません。
この処理がないと、文字を入力したとき無限ループになってしまいますが、それはなぜなのでしょうか。
また、標準入力から値を受け取ったscanfがEOFを返すときは、Ctrl+z が押されたとき、で正しいでしょうか。
至らなくて申し訳ありませんが、よろしければご教示ください。
返信ありがとうございます。
返信が遅くなってしまい申し訳ありません。
丁寧に教えてくださってありがとうございます。
scanfは空白を読み飛ばした後数字を読み込む、というのは自分でも調べてみて理解することができました。
ですが、
scanf("%*[^\n]");
というのが、なんだかよくわかりません。
この処理がないと、文字を入力したとき無限ループになってしまいますが、それはなぜなのでしょうか。
また、標準入力から値を受け取ったscanfがEOFを返すときは、Ctrl+z が押されたとき、で正しいでしょうか。
至らなくて申し訳ありませんが、よろしければご教示ください。
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 数値入力の例外処理について。
- 返信数: 8
- 閲覧数: 11434
Re: 数値入力の例外処理について。
>>かずまさん 返信ありがとうございます! 書いていただいたコードを実行してみたら、うまく処理することができました。すごくうれしいです。 ありがとうございます。 >>ただの屍のようださん 返信ありがとうございます! 補足説明うれしいです(><) お二人の返信を参考に、自分なりにコードについて調べてみましたが、よくわからないところがあるので さらに質問させていただきます。 勉強不足で申し訳ありません。 feof(stdin)は、stdinがファイルの終わりがあると0以外、終わりがないと0を返すようですが、 文字入力されたとき、どうして0が返るのでしょうか。 また、11行目の意味は、改行を取り除い...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 数値入力の例外処理について。
- 返信数: 8
- 閲覧数: 11434
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 数値入力の例外処理について。
- 返信数: 8
- 閲覧数: 11434
数値入力の例外処理について。
こんばんは、いつもお世話になっております。 よろしくおねがいします。 キーボードから入力された0から5までの整数値を受け取り処理を行いたいです。 はじめは、scanf関数で受け取っていましたが、これでは誤って文字入力がなされたときに無限ループになってしまいました。 そこで、getsやgetcharなどの関数を使って例外処理を行おうと思ったのですが、なかなかうまくいきません。 とりあえず、0から9までの整数値と、一文字の文字が入力されるかもしれないと考えて、例外処理を作成したいです。 思いついたのは、gets関数で一文字読み込み、atoi関数で整数値に変換する方法でしたが、atoi関数に文字を入...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 呼び出された関数からさらに関数を呼ぶときの、ポインタの扱いについて。
- 返信数: 2
- 閲覧数: 1712
Re: 呼び出された関数からさらに関数を呼ぶときの、ポインタの扱いについて。
>>beatleさん
返信ありがとうございます。
そちらのほうが同じ変数名なのに*がついていたりついていなかったりで、ぱっと見たときにわかりにくくなるのが
改善されそうです。
そうするようにします。
曖昧な質問でしたが、答えた下さってありがとうございました。
返信ありがとうございます。
そのとおりです。ご指摘ありがとうございます。beatle さんが書きました: main内では &b ですよね?
なるほどです。beatle さんが書きました: 例えば変数名を変えるとかどうですか?
そちらのほうが同じ変数名なのに*がついていたりついていなかったりで、ぱっと見たときにわかりにくくなるのが
改善されそうです。
そうするようにします。
曖昧な質問でしたが、答えた下さってありがとうございました。
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 呼び出された関数からさらに関数を呼ぶときの、ポインタの扱いについて。
- 返信数: 2
- 閲覧数: 1712
呼び出された関数からさらに関数を呼ぶときの、ポインタの扱いについて。
おはようございます。 初心者です。よろしくおねがいします。 下記のような関係のプログラムを作成しています。 main関数内には、int型の2次元配列a、int型の変数b,cがあります。 main関数内では、関数sub1を呼び出します。 呼び出す際の引数はa,b,cです。 いずれも、sub1内で値を書き換えたいので、アドレスを渡します。 sub1内では、関数sub2を呼び出します。 呼び出す際の引数はa,bです。 ここでも、いずれの値もsub2内でさらに書き換えたいので、アドレスを渡したいです。 //省略 sub1(int (*a)[10],int *b, int *c); sub2(int (...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: プログラムのインクルードについて
- 返信数: 7
- 閲覧数: 3565
Re: プログラムのインクルードについて
>>へにっくすさん
返信ありがとうございます。
別々にコンパイルしていました(><)
へにっくすさんのおっしゃる通りにしてみたら、きちんとコンパイルすることができました。
ありがとうございます。
>>3D_3Dさん
返信ありがとうございます。
もっと勉強します(><)
無事、コンパイルすることができました。
付き合っていただいてありがとうございました。
打ち間違いも気を付けるようにします(><)
お二方ともありがとうございました。
無事改善することができたので、解決とさせていただきます。
精進します。
返信ありがとうございます。
別々にコンパイルしていました(><)
へにっくすさんのおっしゃる通りにしてみたら、きちんとコンパイルすることができました。
ありがとうございます。
>>3D_3Dさん
返信ありがとうございます。
もっと勉強します(><)
無事、コンパイルすることができました。
付き合っていただいてありがとうございました。
打ち間違いも気を付けるようにします(><)
お二方ともありがとうございました。
無事改善することができたので、解決とさせていただきます。
精進します。
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: プログラムのインクルードについて
- 返信数: 7
- 閲覧数: 3565
Re: プログラムのインクルードについて
>>3D_3Dさん 返信ありがとうございます。 言われてみればそうですね、書き換えておきます(><) すみませんが、関数の実体とは何のことでしょうか… たとえばsub1.cは #include <stdio.h> #include <stdlib.h> #include "a.h" #include "b.h" #include "c.h" boid sub1(int a[10][10],int b) { //省略 } というようになっています。すべて同じディレクトリ内にあります。 知識不足ですみません。 開発環境は、 OS:Windows7 コンパイラ:Borland C++ Compile...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: プログラムのインクルードについて
- 返信数: 7
- 閲覧数: 3565
Re: プログラムのインクルードについて
>>3D_3Dさん 返信ありがとうございます。 a.h , c.hは以下のように #ifndef A_H #define A_H void A(int a[10][10]); #endif sub1.h , sub2.h , b.h は以下のように書いてみました。 void sub1(int a[10][10],int b); このような書き方でいいでしょうか。 また、これらのヘッダファイルをインクルードするようプログラムを変更してコンパイルしたところ、 main.c以外では 「外部シンボル'_main'が未解決」 main.cでは 「外部シンボル'_sub1'が未解決」 「外部シンボル'_s...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: プログラムのインクルードについて
- 返信数: 7
- 閲覧数: 3565
プログラムのインクルードについて
おはようございます。 プログラム初心者です。よろしくおねがいします。 現在、6つのC言語プログラム(main.c, sub1.c, sub2.c, a.c, b.c, c.c)を作成し、画像のような関係でインクルードして使いたいと思っています。 http://ai-chi.img.jugem.jp/20130707_330422.png ですが、main.cをコンパイルしたところ 'a'の宣言が複数見つかった ひとつ前の'a'の定義位置 'a'の宣言が複数見つかった ひとつ前の'a'の定義位置 'c'の宣言が複数見つかった ひとつ前の'c'の定義位置 というエラーが表示されました。 a.cは3...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 関数に関数名を渡す際の記述の仕方について教えてください。
- 返信数: 6
- 閲覧数: 2712
Re: 関数に関数名を渡す際の記述の仕方について教えてください。
>>みけCATさん
返信ありがとうございます。
言われてみるとそうですね(><)
ご指摘ありがとうございます!
>>涼雅さん
返信ありがとうございます。
なるほどです!
解説してくださってありがとうございます(><)
解決しました!お二方ともありがとうございました!
返信ありがとうございます。
言われてみるとそうですね(><)
ご指摘ありがとうございます!
>>涼雅さん
返信ありがとうございます。
なるほどです!
解説してくださってありがとうございます(><)
解決しました!お二方ともありがとうございました!
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 関数に関数名を渡す際の記述の仕方について教えてください。
- 返信数: 6
- 閲覧数: 2712
Re: 関数に関数名を渡す際の記述の仕方について教えてください。
みけCATさんのアドバイスを参考にもう一度考えなおしたところ、 次のようなプログラムを作成することができました。 実行は成功しました、ありがとうございます(><) #include <stdio.h> int plus(int); void func(int *,int,char *); int main(void) { int i; int x[5]={0,1,2,3,4}; func(x,5,plus); for(i=0; i<5; i++){ printf("x[%d]=%d\n",i,x[i]); } return 0; } int plus(int a) { return a+10;...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 関数に関数名を渡す際の記述の仕方について教えてください。
- 返信数: 6
- 閲覧数: 2712
Re: 関数に関数名を渡す際の記述の仕方について教えてください。
>>みけCATさん
返信ありがとうございます。
int(*compar)(const void *x, const void *y)
のところですよね。
ありがとうございます、少し考えてきます!
返信ありがとうございます。
int(*compar)(const void *x, const void *y)
のところですよね。
ありがとうございます、少し考えてきます!
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 関数に関数名を渡す際の記述の仕方について教えてください。
- 返信数: 6
- 閲覧数: 2712
関数に関数名を渡す際の記述の仕方について教えてください。
こんばんは、プログラミングで困っています。 初心者です。 アドバイスおねがいします。 関数の引数として別の関数の名前をわたしたとき、引数をうけとる関数はどのように記述すればよいのでしょうか。 プログラム全体の動作は簡単で、メイン関数内の配列xに格納された値にそれぞれ10を足して出力させます。 メイン関数で関数funcを呼び出す際、引数として関数plusの名前をわたします。 ※メイン関数はこのままで、関数plusとfuncだけを改善したいです。 関数のポインタについて調べていたのですが、よくわからなかったので質問させていただきます。 下は、自分なりに作ったプログラムです。 特に「*****」の部...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 画像処理プログラムと、処理速度について。
- 返信数: 7
- 閲覧数: 3858
Re: 画像処理プログラムと、処理速度について。
>>softyaさん
返信ありがとうございます。
たくさんのアドバイスをありがとうございます!
参考にさせていただきます…!
またわからないことがあったとき、よろしくおねがいします。
返信ありがとうございます。
たくさんのアドバイスをありがとうございます!
参考にさせていただきます…!
またわからないことがあったとき、よろしくおねがいします。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 画像処理プログラムと、処理速度について。
- 返信数: 7
- 閲覧数: 3858
Re: 画像処理プログラムと、処理速度について。
これでこのトピックは解決済みとさせていただきます。
softyaさん、ありがとうございました。
softyaさん、ありがとうございました。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 画像処理プログラムと、処理速度について。
- 返信数: 7
- 閲覧数: 3858
Re: 画像処理プログラムと、処理速度について。
>>softyaさん
返信ありがとうございます。
そうなんですか!
てっきりstackのほうが速いものなのだと思い込んでおりました。気をつけます。
2つ前の返信も、詳しくしてくださってありがとうございます。
gettimeofdayはマイクロ秒の精度ですが、プログラムを実行して速度を測ったときのばらつきは大きかったです。
やはり、結果が欲しいなら厳密にしなければいけませんね。
標準偏差もとってみようと思います。
返信ありがとうございます。
そうなんですか!
てっきりstackのほうが速いものなのだと思い込んでおりました。気をつけます。
2つ前の返信も、詳しくしてくださってありがとうございます。
gettimeofdayはマイクロ秒の精度ですが、プログラムを実行して速度を測ったときのばらつきは大きかったです。
やはり、結果が欲しいなら厳密にしなければいけませんね。
標準偏差もとってみようと思います。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 画像処理プログラムと、処理速度について。
- 返信数: 7
- 閲覧数: 3858
Re: 画像処理プログラムと、処理速度について。
>>softyaさん
返信ありがとうございます。
なるほどです。
今使っているのはUnixなのですが、1ミリ秒くらいの差は、いつもあるとは考えないほうがよさそうですね。
ということは、今、できるだけ速いプログラムを作りたいと思っているのですが
この処理の場合、どちらの方法で読み込んでも、メモリの領域がstackでもstaticでも大差ないということ、ですよね(><;)
ただ、一般にはstaticよりもstackのほうが、アクセス速度は速いということでいいのでしょうか。
返信ありがとうございます。
なるほどです。
今使っているのはUnixなのですが、1ミリ秒くらいの差は、いつもあるとは考えないほうがよさそうですね。
ということは、今、できるだけ速いプログラムを作りたいと思っているのですが
この処理の場合、どちらの方法で読み込んでも、メモリの領域がstackでもstaticでも大差ないということ、ですよね(><;)
ただ、一般にはstaticよりもstackのほうが、アクセス速度は速いということでいいのでしょうか。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 画像処理プログラムと、処理速度について。
- 返信数: 7
- 閲覧数: 3858
画像処理プログラムと、処理速度について。
こんにちは。 本日もよろしくおねがいします。 今、1600*1600画素のRAW画像を読み込み、補正を行って書き出すプログラムを作成しています。 画像を読み込む配列の宣言、読み込み、処理、書き出しの速度の合計を測定しているのですが、疑問に思うことがあります。 1画素ずつ読み込んで、書き出す方式は、とても処理速度が遅かったので… 1600*1600画素の画像を、1600*1600個要素を持つ配列に、1枚いっきに読み込む方法の方が 1600画素を、1600個要素を持つ配列に、1600回読み込む方法よりも、処理速度が速いと予想していたのですが gettimeofday関数を用いて、速度の測定を行った...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 画像処理プログラムの、処理の改善点を教えて下さい。
- 返信数: 10
- 閲覧数: 3581
Re: 画像処理プログラムの、処理の改善点を教えて下さい。
>>h2so5さん
返信ありがとうございます!
良かったです(^-^)
丁寧に答えてくださって有難うございました。
では、次からはsoftyaさんがおっしゃっていたようなことを考えなければいけないですね。勉強したいと思います。
これで、このトピックは解決済みということにさせていただきます。
有難うございました!
返信ありがとうございます!
良かったです(^-^)
丁寧に答えてくださって有難うございました。
では、次からはsoftyaさんがおっしゃっていたようなことを考えなければいけないですね。勉強したいと思います。
これで、このトピックは解決済みということにさせていただきます。
有難うございました!
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 画像処理プログラムの、処理の改善点を教えて下さい。
- 返信数: 10
- 閲覧数: 3581
Re: 画像処理プログラムの、処理の改善点を教えて下さい。
>>h2so5さん 返信ありがとうございます。 なるほどです! それならば1600*1600回も計算しなくてもいいですね! 実際にプログラムを作成してみました。 実行結果は正しかったですし、処理速度もかなり上がりましたが、h2so5さんが考えておられる処理と一致しているかどうか確認していただけるとうれしいです。 for(i=0; i<256; i++){ if(i>max) table[i]=255; else if(i<min) table[i]=0; else{ table[i]=(char)((255*sqrt(i-min))/c); } } fread(buf,1,1600*1600,...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 画像処理プログラムの、処理の改善点を教えて下さい。
- 返信数: 10
- 閲覧数: 3581
Re: 画像処理プログラムの、処理の改善点を教えて下さい。
>>softyaさん
返信ありがとうございます。
非同期アクセスですか…なるほどです。
座学としては習ったことがあるのですが、実際にプログラムを組んだことがまだないので、理解できるまでにとても時間がかかると思いますが、挑戦してみたいと思います。
ただ、現時点では、上のような処理を考えるので手一杯でしたので、もう少し整理してから、非同期アクセスの処理方法について勉強します。
せっかくアドバイスを下さったのに申し訳ございません。
精進いたします。
返信ありがとうございます。
非同期アクセスですか…なるほどです。
座学としては習ったことがあるのですが、実際にプログラムを組んだことがまだないので、理解できるまでにとても時間がかかると思いますが、挑戦してみたいと思います。
ただ、現時点では、上のような処理を考えるので手一杯でしたので、もう少し整理してから、非同期アクセスの処理方法について勉強します。
せっかくアドバイスを下さったのに申し訳ございません。
精進いたします。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 画像処理プログラムの、処理の改善点を教えて下さい。
- 返信数: 10
- 閲覧数: 3581
Re: 画像処理プログラムの、処理の改善点を教えて下さい。
>>h2so5さん 返信ありがとうございます! 無事黒飛びを直すことができました…! 1番始めの質問の補足なのですが… 上の処理(1枚読み込んで、1枚書き出す)と、下の処理(1画素読み込んで、1画素書き出す)との処理速度がほとんど変わりません。 1枚いっきに読み込み書き出す方が、処理速度は早いと思っていたのですが、これはなぜなのでしょうか。 上のプログラムの方で改善できる点を教えていただけるとうれしいです。 よろしくおねがいします。 ※a,bはunsigned char型の変数です。 for(i=0; i<1600*1600; i++){ a=fgetc(fp); if(a>max) b=25...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 画像処理プログラムの、処理の改善点を教えて下さい。
- 返信数: 10
- 閲覧数: 3581
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 画像処理プログラムの、処理の改善点を教えて下さい。
- 返信数: 10
- 閲覧数: 3581
画像処理プログラムの、処理の改善点を教えて下さい。
こんにちは。 本日もよろしくお願いします。 1600x1600画素のraw画像をfread()関数で読み込み、1画素ずつ処理を行ってから、fwrite()関数で書き出します。 処理速度をあげたいと思い、1回で1600x1600画素読み込んでいるのですが、1画素ずつ読み込んで適宜処理を行った場合とプログラムスピードが変わりません。 改善できる点を教えていただきたいです。 よろしくおねがいします。 ※ソースコード全体は長いので、割愛します。知りたい部分がありましたら、ご指摘いただけるとうれしいです。 下のコードは、画像を読み込んで、処理をして書き出す部分です。 buf,buf2は1600x1600...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: gettimeofdayを使ったプログラムスピードの測定について。
- 返信数: 3
- 閲覧数: 10005
Re: gettimeofdayを使ったプログラムスピードの測定について。
ありがとうございました。
精進します。
精進します。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: gettimeofdayを使ったプログラムスピードの測定について。
- 返信数: 3
- 閲覧数: 10005
Re: gettimeofdayを使ったプログラムスピードの測定について。
>>boxさん
返信ありがとうございます。
成程です…!
私は二つを足すと、時刻の値が2倍になってしまうと思っていたのですが、勘違いをしていたようです。
マイクロ秒は、紀元からの経過時間のマイクロ秒でなく、秒と秒の間のマイクロ秒なんですね。
返信ありがとうございます。
成程です…!
私は二つを足すと、時刻の値が2倍になってしまうと思っていたのですが、勘違いをしていたようです。
マイクロ秒は、紀元からの経過時間のマイクロ秒でなく、秒と秒の間のマイクロ秒なんですね。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: gettimeofdayを使ったプログラムスピードの測定について。
- 返信数: 3
- 閲覧数: 10005
gettimeofdayを使ったプログラムスピードの測定について。
宜しくお願いします。 double get_dtime(void) { struct timeval tv; gettimeofday(&tv, NULL); //ミリ秒を計算 return ((double)(tv.tv_sec)*1000 + (double)(tv.tv_usec)*0.001); //★ } プログラムスピードを計る際、↑のような関数を作成して使用するとよいと調べたのですが、★の行で何をしているのかわかりません。 tv_secは秒、tv_usecはマイクロ秒だと思うのですが、なぜこのような計算をして、ミリ秒が返るのでしょうか…。 特に、足し算の部分で何をしているのかわか...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
- 返信数: 20
- 閲覧数: 9027
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
- 返信数: 20
- 閲覧数: 9027
Re: グレースケールのRAW画像を、RGB合成するプログラムについて。
>>beatleさん
返信ありがとうございます。
勉強したい気持ちはおおいにあります。
しかしまずはもう少し自分で考えてから、質問させていただきます。
気にかけてくださってありがとうございます。
いろいろ考えてくださってありがとうございました。
精進します!
返信ありがとうございます。
勉強したい気持ちはおおいにあります。
しかしまずはもう少し自分で考えてから、質問させていただきます。
気にかけてくださってありがとうございます。
いろいろ考えてくださってありがとうございました。
精進します!
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
- 返信数: 20
- 閲覧数: 9027
Re: グレースケールのRAW画像を、RGB合成するプログラムについて。
>>asdさん
返信ありがとうございます!
どうやら、RGBへの各バンドの対応がおかしかったようです…。
「.rgb」の画像のフォーマットどおりに組んだつもりだったのですが…今、フォーマットについて調べ直しているところです。
気にかけてくださってありがとうございます。
返信ありがとうございます!
どうやら、RGBへの各バンドの対応がおかしかったようです…。
「.rgb」の画像のフォーマットどおりに組んだつもりだったのですが…今、フォーマットについて調べ直しているところです。
気にかけてくださってありがとうございます。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
- 返信数: 20
- 閲覧数: 9027
Re: グレースケールのRAW画像を、RGB合成するプログラムについて。
>>beatleさん 返信ありがとうございます! おっしゃるとおり、下のように確認してみました。 for(i=0;i<1600*1600;i++) { buf[i*3]=255; buf[i*3+1]=0; buf[i*3+2]=0; } そうすると、どうやらGRBの順番に対応しているようでした…!! 「.rgb」の画像のフォーマットを調べてみるとRGBの順番だとあったのでとても不思議ですが、とにかくGRBの順番に変えると、トゥルースカラーの画像を表示させることができました! 長い間ご指摘くださってありがとうございました >< フォーマットの方の原因を調べてきます。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
- 返信数: 20
- 閲覧数: 9027
Re: グレースケールのRAW画像を、RGB合成するプログラムについて。
>>beatleさん 返信ありがとうございます。 閲覧アプリには「ImageMagick」を使用しています。 RGBの順番は間違っていないはずです。 今のコードは下のようになっています。 アドバイスだけでもよいので、どなたかお願い致します。 #include<stdio.h> #include<stdlib.h> int main(void) { static unsigned char buf_1[800*800], buf_2[800*800], buf_3[800*800] ,buf[800*800*3]; FILE *file_1,*file; int i; float max,min...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
- 返信数: 20
- 閲覧数: 9027
Re: グレースケールのRAW画像を、RGB合成するプログラムについて。
>>beatleさん
返信ありがとうございます。
それについても確認しましたが、正しいはずです。
3つの画像は衛星画像で、sample1はバンド1、sample2はバンド2、sample3はバンド3の画像です。
トゥルーカラーに合成したいので、Rにはバンド3、Gにはバンド2、Bにはバンド1を割り当てました。
返信ありがとうございます。
それについても確認しましたが、正しいはずです。
3つの画像は衛星画像で、sample1はバンド1、sample2はバンド2、sample3はバンド3の画像です。
トゥルーカラーに合成したいので、Rにはバンド3、Gにはバンド2、Bにはバンド1を割り当てました。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
- 返信数: 20
- 閲覧数: 9027
Re: グレースケールのRAW画像を、RGB合成するプログラムについて。
>>beatleさん
返信ありがとうございます。
それについては、
まず補正を行う前に合成を行うと、正しいはずの出力画像よりも青っぽい感じで出力されてしまいました。
また、伸張化を行ったあとのGRAY画像は、明暗のくっきりした画像になっていました。
これにより、原画像ファイルのデータが壊れているかもしれないと思い、新しく画像を取ってきたのですが、実行結果は変わりませんでした。
返信ありがとうございます。
それについては、
まず補正を行う前に合成を行うと、正しいはずの出力画像よりも青っぽい感じで出力されてしまいました。
また、伸張化を行ったあとのGRAY画像は、明暗のくっきりした画像になっていました。
これにより、原画像ファイルのデータが壊れているかもしれないと思い、新しく画像を取ってきたのですが、実行結果は変わりませんでした。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
- 返信数: 20
- 閲覧数: 9027
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
- 返信数: 20
- 閲覧数: 9027
Re: グレースケールのRAW画像を、RGB合成するプログラムについて。
>>beatleさん
返信ありがとうございます。
なるほどです…ではfloat型で宣言して計算するのがよいのでしょうか…><;;
また、buf[]自体はcharですが、計算後代入するのは、文字型に明示的にキャストしてからのほうがよいでしょうか?
返信ありがとうございます。
なるほどです…ではfloat型で宣言して計算するのがよいのでしょうか…><;;
また、buf[]自体はcharですが、計算後代入するのは、文字型に明示的にキャストしてからのほうがよいでしょうか?
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
- 返信数: 20
- 閲覧数: 9027
Re: グレースケールのRAW画像を、RGB合成するプログラムについて。
>>ホヅミさん 返信ありがとうございます。 失礼しました。 ソースコードを下に記します。 >>asdさん RAW画像は、衛星画像です。 先ほど新しい事実が発覚したのですが… ><;; 以前、同じプログラムを作成した方のものも実行してみたのですが、以前はきちんとカラー画像が作成できていたプログラムとまったく同じものを使用しても、色みのおかしい画像ができてしまいました。 PCが違うのですが、これは原因のうちに入るのでしょうか。 キャストですか…あまり問題はないと思ったのですが、どうでしょうか。 プログラムを確認していただけるとうれしいです。 よろしくお願いします。 #include<stdio.h...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: グレースケールのRAW画像を、RGB合成するプログラムについて。
- 返信数: 20
- 閲覧数: 9027
グレースケールのRAW画像を、RGB合成するプログラムについて。
現在、3枚のグレースケールRAW画像を読み込み、「ヒストグラム伸張化」を行ってから、RGB合成を行う画像処理プログラムを作成しています。 そこで、合成したカラー画像が、どうしても紫がかった色になってしまい困っています。 3枚の原画像それぞれに、ヒストグラム伸張化の処理を行うのですが… この処理では、画像の輝度値の最大レベルmaxと最小レベルminを設定し a' = (a-min)*255/(max-min) という式で、輝度値aをa'に補正しています。 この処理を行うと、ヒストグラムが無理やり引き延ばされて、ある輝度値と、次の輝度値とに間ができてしまいます。(伝わりにくければすみません) 3枚...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。
- 返信数: 4
- 閲覧数: 2562
Re: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。
>>h2so5さん、見てくださったみなさまどうもありがとうございました。
ご迷惑をおかけしてしまい申し訳ありません。
今後はもっとよく考えてからスレッドを立てるようにします><
ご迷惑をおかけしてしまい申し訳ありません。
今後はもっとよく考えてからスレッドを立てるようにします><
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。
- 返信数: 4
- 閲覧数: 2562
Re: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。
どうやらいろいろな場所が間違っていたようです。 見てくださった皆さんには、ご迷惑をおかけしました。 すみません。 下のように改善しましたところ、無事実行することができました。 #include<stdio.h> #include<stdlib.h> int main(void) { FILE *fp1,*fp2,*fphist1,*fphist2; static unsigned char buf[1600*1600]; //入力画像 static unsigned char buf2[1600*1600]; //出力画像 int i,j; //ループ変数 int c; //ヒストグラム伸張化...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。
- 返信数: 4
- 閲覧数: 2562
Re: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。
>>h2so5さん
返信、ご指摘ありがとうございます!
41行目は改善します。すみません><
どこで止まるのかも調べてみようと思います。
返信、ご指摘ありがとうございます!
41行目は改善します。すみません><
どこで止まるのかも調べてみようと思います。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。
- 返信数: 4
- 閲覧数: 2562
raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。
まだ初心者ですが、よろしくおねがいします。 raw画像を読み込み、ヒストグラムを伸張化して画像を出力するプログラムを作成しています。 コンパイルは通ったのですが、実行をすると、前回と同じく「問題が発生したため、プログラムが正しく動作しなくなりました。」と表示され、実行が止まってしまいました。 プログラムが重たいのでしょうが、これをどのようにしたら改善できるのかわかりません。 アドバイスを頂けるとうれしいです。 よろしくご教示ください。 #include<stdio.h> #include<stdlib.h> int main(void) { FILE *fp1,*fp2,*fphist1,*f...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: RAWファイルを読み込み、書き出すプログラム
- 返信数: 5
- 閲覧数: 8270
Re: RAWファイルを読み込み、書き出すプログラム
解決にチェックを入れるのを忘れておりました。
みなさん本当にありがとうございました。
みなさん本当にありがとうございました。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: RAWファイルを読み込み、書き出すプログラム
- 返信数: 5
- 閲覧数: 8270
Re: RAWファイルを読み込み、書き出すプログラム
>>涼雅さん
返信ありがとうございます。
デバッガとブレークポイントはまだ一度も使ったことがなく、とても疎いので、今すぐに把握することはできません><
せっかく指摘していただいたのに申し訳ありません。今後、使用を試みようと思います。
>>ジンセイさん
返信ありがとうございます。
書き換えてみたことろ、ちゃんとファイルを生成することができました!
ありがとうございます!
>>tamanekoさん
返信ありがとうございます。
2500KBくらいになると思います。
返信ありがとうございます。
デバッガとブレークポイントはまだ一度も使ったことがなく、とても疎いので、今すぐに把握することはできません><
せっかく指摘していただいたのに申し訳ありません。今後、使用を試みようと思います。
>>ジンセイさん
返信ありがとうございます。
書き換えてみたことろ、ちゃんとファイルを生成することができました!
ありがとうございます!
>>tamanekoさん
返信ありがとうございます。
2500KBくらいになると思います。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: RAWファイルを読み込み、書き出すプログラム
- 返信数: 5
- 閲覧数: 8270
RAWファイルを読み込み、書き出すプログラム
初心者ですが、宜しくお願いします。 ただ今、既存のRAWファイルを読み込み、書き出すだけのプログラムを作成しています。 コンパイルは通ったのですが、実行をすると、「問題が発生したため、プログラムが正しく動作しなくなりました。このプログラムを閉じてください。」と警告が出てきて、プログラムが止まってしまいます。 どこを改善すればよいのかわかりません。 勉強不足で申し訳ありませんが、ご教示いただけるとうれしいです。 宜しくお願いします。 #include<stdio.h> #include<stdlib.h> int main(void) { FILE *fp1,*fp2; unsigned cha...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 自作関数と再帰呼び出しを使ったプログラムについて。
- 返信数: 15
- 閲覧数: 4987
Re: 自作関数と再帰呼び出しを使ったプログラムについて。
>かずまさん 返信ありがとうございます。 なぜ、段数を 1増やして、元に戻すところで、2減らしているのですか? すみません、おかしいですね。直しました。 for (k = 0; k <= j; k++) { では、j 回ではなく、(j+1) 回ループを実行します。 わたしも自分で気になっていたところなので、自分なりに直してみました。 問題には、「0から100までのランダムな値」とあるのに、そのそのプログラムでは 0から 999 までのランダムな値になっています。 すみません!問題の記述のほうがミスです。 正しくは「0から1000までのランダムな値」です。ごめんなさい。 たくさん指摘してくださ...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 自作関数と再帰呼び出しを使ったプログラムについて。
- 返信数: 15
- 閲覧数: 4987
Re: 自作関数と再帰呼び出しを使ったプログラムについて。
>boxさん 返信ありがとうございます。 ありがとうございます。同じ質問ですね。 参考にさせていただきます。 >beatleさん 返信ありがとうございます。 なぜ2になってしまうのかようやくわかりました。 ですが、このように変更してみたのですが、微妙に違うかんじになってしまいます。 すこし考えてきます。 何か決定的な勘違いをしているようなら教えてくださるとありがたいです。 #include <stdio.h> #include <stdlib.h> #include <time.h> void result(int); int tree[100]; int N; int i,j; int ma...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 自作関数と再帰呼び出しを使ったプログラムについて。
- 返信数: 15
- 閲覧数: 4987
Re: 自作関数と再帰呼び出しを使ったプログラムについて。
>かずまさん 返信ありがとうございます。 だんだんと理解できてきたような気がします! かずまさんのご説明を参考にプログラムをつくりかえてみました。 void result(int i) { int j=0; int k; if(i<N){ j++; result(2*i+1); //子ども1(tree[2*i+1])以下を出力(再帰!) for(k=0;k<=j;k++){ printf("\t"); } printf("%d\n",tree[i]); //自分(tree[i])を出力 result(2*i+2); //子ども2(tree[2*i+1])以下を出力(再帰!) j--; } el...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 自作関数と再帰呼び出しを使ったプログラムについて。
- 返信数: 15
- 閲覧数: 4987
Re: 自作関数と再帰呼び出しを使ったプログラムについて。
>boxさん 返信ありがとうございます。 なるほどです。 自分→親→次というながれはなんとなく理解できたのですが、 1)最初の引数の値が2番目の引数の値以上であれば、何もしない。これが、再帰から抜け出す条件。 こちらの部分がよくわかりませんでした。わたしは、初めに再帰を抜け出すのはこの問題でいう15(添え字7)のときかと思ったのですが、どうでしょう。至らなくてすみません。 また、みなさんの返信をもとに、処理の流れをかんがえてみました。 http://awakening03.img.jugem.jp/20120709_2522164.jpg このような流れでいいのでしょうか。 プログラムに落とす...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 自作関数と再帰呼び出しを使ったプログラムについて。
- 返信数: 15
- 閲覧数: 4987
Re: 自作関数と再帰呼び出しを使ったプログラムについて。
>boxさん
返信ありがとうございます。
ookamiさんもおっしゃるとおり、木構造が関係しているのは形だけなのですね。
たしかに法則がありそうです。
しかし、表示順は[7][3][8][1]...となると思うので、苦戦している次第であります。
>h2so5さん
返信ありがとうございます。
なるほどです!たしかにそうですね。
それでは添え字+2を加算した値が、Nより大きいか否かで判断すればよいでしょうか。
すこし考えてきます。
返信ありがとうございます。
ookamiさんもおっしゃるとおり、木構造が関係しているのは形だけなのですね。
たしかに法則がありそうです。
しかし、表示順は[7][3][8][1]...となると思うので、苦戦している次第であります。
>h2so5さん
返信ありがとうございます。
なるほどです!たしかにそうですね。
それでは添え字+2を加算した値が、Nより大きいか否かで判断すればよいでしょうか。
すこし考えてきます。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 自作関数と再帰呼び出しを使ったプログラムについて。
- 返信数: 15
- 閲覧数: 4987
Re: 自作関数と再帰呼び出しを使ったプログラムについて。
>h2co5さん
返信ありがとうございます。
現在の添え字に、現在の添え字+1を加算した値が、Nより大きいか否かで判断できるのではないかと思ったのですが、どうでしょうか。
>ookamiさん
返信ありがとうございます。
確かにわたしもどうかと思ったのですが、再帰呼び出しのところの練習課題として出された問題のひとつなのです。ごめんなさい。
返信ありがとうございます。
現在の添え字に、現在の添え字+1を加算した値が、Nより大きいか否かで判断できるのではないかと思ったのですが、どうでしょうか。
>ookamiさん
返信ありがとうございます。
確かにわたしもどうかと思ったのですが、再帰呼び出しのところの練習課題として出された問題のひとつなのです。ごめんなさい。