C言語を使用して画像処理をしています。
ある画像からマスク像を使用してサブトラクションをし、更にマスク像をピクセルシフトを利用して動かすにはどのようなプログラムを書けばよいのかわかりません・・・。
私の持っているC言語の本には画像処理の関係のプログラムについてあまりふれられていないので困っています。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

ピクセルシフトとサブトラクションという漠然とした言葉だけでは、何をしたいのかわかりません。


黒い画面に文字のようなものを流して、その文字の部分だけ後ろの絵が見えるようにするって意味でしょうか?
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qプログラム C言語 画像処理について

プログラミングC言語についての質問です。
入力画像の横幅だけを1/2倍するプログラムを作成したいのですが、なかなかできません。わかる方がいらしたらお願いします。
visual studio を使っています。
画像は、いま自分で書いているものです。
このやり方でなくてもいいので回答をお願いします。

Aベストアンサー

例えば ImageMagick
http://www.imagemagick.org/script/index.php
というパッケージにある
convert
http://www.imagemagick.org/script/convert.php
を使えばそれっぽい動作になるように思えるんだけど....

Qc言語でcsvファイルの処理で、処理速度が速いプログラムを書こうと思っ

c言語でcsvファイルの処理で、処理速度が速いプログラムを書こうと思っています。
以下のようなcsvファイル、件数は約10000000件以上あるものを使います
shop,ymd,gend,age,area,amt
20,2008-05-01,3,5,014,128
22,2008-05-01,2,4,015,350
:
二列目の日別、つまりymd別に最後列のamdの小計を出したいんですが、組んだプログラムを実行してみると、セグメンテーション違反ですと出てしまうんです。以下のようなプログラムを組んだんですが

#include <stdio.h>
#include <string.h>
#include <time.h>

#define MM 256

int main()
{
FILE *fp;
char str[MM],*p1, *p2,*ymd;
int num, sum;

clock_t start,end;
start = clock();

fp = fopen("csv.csv","r");

if(fp == NULL){
printf("ファイルが開けませんでした。\n");
return(0);
}

sum = 0;
fgets(str, sizeof(str), fp);
while(fgets(str, sizeof(str), fp) != NULL){
p1 = strtok(str, ",");
p1 = strtok( NULL,",");
ymd = p1;
p2 = strrchr(str,',');
sum[ymd] = atoi(p2+1);
break;
}

while( fgets(str, sizeof(str), fp) != NULL && p1 != NULL){
p1 = strtok(str, ",");
p1 = strtok( NULL,",");
p2 = strrchr(str,',');
if ( p2 != NULL ) {
if(ymd == p1){
sum[ymd] += atoi(p2+1);
}else{
printf("%s ,%d \n",ymd,sum[ymd]);
strcpy(ymd,p1);
}
}
}
printf("%s ,%d \n",p1,sum);
fclose(fp);

end=clock();
printf("%.2f秒\n",(double)(end-start)/CLOCKS_PER_SEC);
return(0);
}

うまくいきません。大体、処理速度は3秒以内を目指しています。
どなたかご教授御願いいたします。

c言語でcsvファイルの処理で、処理速度が速いプログラムを書こうと思っています。
以下のようなcsvファイル、件数は約10000000件以上あるものを使います
shop,ymd,gend,age,area,amt
20,2008-05-01,3,5,014,128
22,2008-05-01,2,4,015,350
:
二列目の日別、つまりymd別に最後列のamdの小計を出したいんですが、組んだプログラムを実行してみると、セグメンテーション違反ですと出てしまうんです。以下のようなプログラムを組んだんですが

#include <stdio.h>
#include <string.h>
#include <time.h>

...続きを読む

Aベストアンサー

No.6です。

>やっぱりポインタはイコールでつなげられないんですか。
ポインタ同士で代入(右辺のアドレスを左辺に入れる等)はできます。

まず、エラーの意味を理解してください。
簡単に書けば「型が違うから代入できない」と言っているのです。

No.6の
--------
>char str[MM],*p1, *p2,ymd1[20], ymd2[20];
と定義しているのに、
>ymd1 = p1;
のような使い方はできませんよ。
--------
について理解されていますでしょうか?

>char str[MM],*p1, *p2,ymd1[20], ymd2[20];
をわかりやすいように分解します。
--------
char str[MM];
char *p1;
char *p2;
char ymd1[20];
char ymd2[20];
--------
p1、p2は「char型のポインタ」
str[]、ymd1[]、ymd2[]は「char型の配列」です。

>ymd1 = p1;
は、ymd[0]に対してp1に格納されているアドレスを代入しようとしているためエラーとなっています。

ひとつアドバイス。
どんなに短いプログラムでも、どこで何の処理を行うのかコメントは降っておいた方が理解しやすいと思う。

No.6です。

>やっぱりポインタはイコールでつなげられないんですか。
ポインタ同士で代入(右辺のアドレスを左辺に入れる等)はできます。

まず、エラーの意味を理解してください。
簡単に書けば「型が違うから代入できない」と言っているのです。

No.6の
--------
>char str[MM],*p1, *p2,ymd1[20], ymd2[20];
と定義しているのに、
>ymd1 = p1;
のような使い方はできませんよ。
--------
について理解されていますでしょうか?

>char str[MM],*p1, *p2,ymd1[20], ymd2[20];
をわかりやす...続きを読む

QC言語プログラムを用いた画像表示プログラム

おはようございます。

お時間ありましたら、ご教授よろしくお願いいたします。

C言語を使って、画像の表示、画像の処理ができるプログラムを作成したいのですが、私自身、JAVAを少しかじった程度の知識しかなくなかなかうまくいきません。

やっかいなことに、ただ画像を表示させるだけでなく、JPEGライブラリを用いた(JPEG画像を読み込んで処理できる)C言語プログラムのプログラムを作成したいのですがうまくいかずご質問させていただきました。

参照できるサイト、ご自信の作られたプログラム、プログラムを経験されている方の記述など教えていただければ幸いです。

明確な質問ではないのでご回答が非常に難しいと思いますが、よろしくお願いいたします。

早朝からお忙しいと思いますが、お時間がありましたら是非ご教授よろしくおねがいします。

Aベストアンサー

私のホームページにお絵かきソフトがあり、ソースを公開しています。
全体で2万行程度で、そのうち9割は汎用モジュールです。
ウィンドウ周りの処理はC++を使用していますが、
ほとんどの部分はCで書いてあります。
よろしければご参照ください。

参考URL:http://www.fiberbit.net/user/mobf5f2/program.html

Q6x6ぼかしマスクをかけるプログラムを作りたい。画像処理の専門書に「6

6x6ぼかしマスクをかけるプログラムを作りたい。画像処理の専門書に「62x62ピクセルの2値画像(内四方2ピクセルは余白領域)があり、それに6x6ドットのぼかしマスクを2ドットずつオーバーラップさせることで、15x15ピクセルの標本化パターンを作成する」との記述がありました。

3x3ドットによる画像のフィルタリングプログラム例は探せば見つかるのですが、偶数倍フィルターにおいてはどのように実装すればよいかがピンときません。プログラムの参考例を教えて欲しいです。

Aベストアンサー

> 62ピクセルだと6や15で割り切れないので、どうやったら帳尻を合わせることができるでしょうか。

 「2ドットずつオーバーラップさせる」とありますね。
 最初に(0,0)を左上とする6×6の領域を処理し、次は4ドット右に移動させた(4,0)を左上とする6×6の領域を処理します。こうやって4ドットずつ移動させると前回の処理とは2ドットずつオーパーラップしていきます。15回目には(56,0)を左上とする6×6の領域を処理しますが、これの右端は62x62ピクセルの画像の右端と重なります。

 こうやって右端まで行くと、今度は左端に戻って4ドット下に移動させた(0,4)を左上とする6×6の領域から同様に右に向かって処理していきます。これもひとつ前(上)の処理とは2ドットずつオーバーラップします。こうやって4ドットずつ下に移動して処理していくと、やはり15回目には(0,56)を左上とする6×6の領域から処理を始めることになり、この領域の下端は62x62ピクセルの画像の下端と重なります。

 こうやって15×15回の処理をして15x15ピクセルの標本化パターンを作成するのです。

> 62ピクセルだと6や15で割り切れないので、どうやったら帳尻を合わせることができるでしょうか。

 「2ドットずつオーバーラップさせる」とありますね。
 最初に(0,0)を左上とする6×6の領域を処理し、次は4ドット右に移動させた(4,0)を左上とする6×6の領域を処理します。こうやって4ドットずつ移動させると前回の処理とは2ドットずつオーパーラップしていきます。15回目には(56,0)を左上とする6×6の領域を処理しますが、これの右端は62x62ピクセルの画像の右端と重なります。

 こうやって右端まで行くと、今...続きを読む

Qfor 文における処理の改善(C言語プログラム)

はじめまして。panicdjです。

いまCでプログラムを組んでいます。
環境はVC++ver6.0 Win32 Console Applicationです。

以下のプログラムを見てください。

#define X_MAX 10
#define Y_MAX 20
#define Z_MAX 5

int main(int argc , char ** argv)
{

int i, j, k;
int aa[10][20][5];

for (i = 0; i < X_MAX; i ++) {
for (j = 0; j < Y_MAX; j ++) {
for (k = 0; k < Z_MAX; k ++) {
aa[i][j][k] = 10.0;
}
}


return 0;
}


過去のスレッドでポインタ型によるアクセスを
すれば、処理が高速になるとかかれていました。

自分は,for文による繰り返す処理ではなく,
その「ポインタ型によるアクセス」を実装したいのです。

こんな私にアドバイスお願い致します。

はじめまして。panicdjです。

いまCでプログラムを組んでいます。
環境はVC++ver6.0 Win32 Console Applicationです。

以下のプログラムを見てください。

#define X_MAX 10
#define Y_MAX 20
#define Z_MAX 5

int main(int argc , char ** argv)
{

int i, j, k;
int aa[10][20][5];

for (i = 0; i < X_MAX; i ++) {
for (j = 0; j < Y_MAX; j ++) {
for (k = 0; k < Z_MAX; k ++) {
aa[i][j][k] = 10.0;
}
}


return 0;
}


過去のスレッドでポインタ型による...続きを読む

Aベストアンサー

> C言語などを解説しているサイトでのサンプルコードとかでしょうか??
も、含めてですね。オープンソースなプログラムとかでもよいと思います。勉強の種は沢山転がってますから探してみてください。

> これは、たとえばVCを用いているのであれば、デバッカの
プログラミングの際の話のつもりで書きました。頭の中にメモリのイメージ(箱とか?)を思い浮かべると良いです。今宣言した変数はどこにあるのか、とか、ポインタの先の実体はどこなのかというのを常に意識してということです。

> できることなら、参考になる書籍やサイトを提示させて
残念ながら Cに関しての書籍・サイトともに知りません。
が、http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/index.html で集められた関数等は勉強になると思います。

参考URL:http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/index.html


人気Q&Aランキング

おすすめ情報