C言語でjpgなどの画像データを扱って
モード法やエッジを表したりなどの画像処理をしたいのですが、
どうやってプログラムをくめばいいのか分かりません。
どのたかプログラムを書いて教えてくれませんか?

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

A 回答 (2件)

もしOSがLinuxであるなら、


GdkImlibを使うと簡単にできます。

jpgにかぎらず、ppm、pgm..など、
ファイル形式に関わらず
左上画素値から順に
rgbrgbrgb....というようにデータを並べた
形で画像データを取得できます。

参考URL:http://hiro.pos.to/gtk/
    • good
    • 0

手っ取り早くそういうプログラムを作成したいのであれば


画像ハンドリングするライブラリが販売されていますので
それを使ってみるのがよいでしょう。
しかし、私の知っているライブラリ「Image Gear」は、
\250,000位の価格なので、趣味でやるには高価かも...。
でも、一通りの画像加工できますよ。
確かサンプルプログラムもついています。

参考URL:http://www.softboat.co.jp/product/ig/index.html
    • good
    • 0

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

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

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

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

Qc言語のプログラムでこの実行結果を出したいのですがどうプログラムすればできますか? 続きの画像は補

c言語のプログラムでこの実行結果を出したいのですがどうプログラムすればできますか?

続きの画像は補足でだします

Aベストアンサー

#include <stdio.h>
#include <stddef.h>

void calc_average(int class[][2], size_t n);

int main(void) {
 int class[4][2] = {{0, 0}};
 calc_average(class, sizeof(class)/sizeof(class[0]));
 return 0;
}

void calc_average(int class[][2], size_t n) {
 int i, j, k;
 printf("クラス(1〜3) --> ");
 scanf("%d", &i);
 if (i <= 0) {
  for (j = 1; j < n; j++)
   printf("クラス %d の平均点 : %f\n", j, ((double)class[j][1])/class[j][0]);
 } else if (i > 0 && i < 4) {
  printf("点数 --> ");
  scanf("%d", &k);
  class[i][0] += 1;
  class[i][1] += k;
  return calc_average(class, n);
 } else
  return calc_average(class, n);
}

#include <stdio.h>
#include <stddef.h>

void calc_average(int class[][2], size_t n);

int main(void) {
 int class[4][2] = {{0, 0}};
 calc_average(class, sizeof(class)/sizeof(class[0]));
 return 0;
}

void calc_average(int class[][2], size_t n) {
 int i, j, k;
 printf("クラス(1〜3) --> ");
 scanf("%d", &i);
 if (i <= 0) {
  for (j = 1; j < n; j++)
   printf("クラス %d の平均点 : %f\n", j, ((double)class[j][1])/class[j][0]);
 } else if (i > 0 && i < 4) {
  pri...続きを読む

Q画像を扱うプログラムを書くのに役立つ入門書・webページ

GCCで画像(とりあえずbmp)を扱うプログラムを書こうと思うのですが、
これまで全く画像を扱った経験がありません。

役に立ちそうな分かりやすい入門書・参考書
あるいはwebページなどがありましたら教えてください。

Aベストアンサー

こんばんは。
「画像を扱う」との意味が今一不明のため、一般的な範囲での情報です。

Netpbm: おそらく最も多種な画像フォーマットを扱うソフトです。その中で BMP を扱っている部分のソースが参考になるのではないでしょうか?

ImageMagick: これも多種の画像を扱うソフトです。Netpbm が基本的にコマンドベースで(本質的に画像データを扱う事に専念)あることに対して、これは X 上の GUI も備えています。

GD: C 上から line や circle 等の図形や文字を描画するためのライブラリです。但し、出力は PNG や JPEG です。

主な物を述べましたが、上記ソフト名をキーにネット上を検索されると色々な情報が見つかると思います。

QCで画像を扱うプログラムを作ろうと考えているのですが…

以下のようなプログラムを作ろうと考えています。

1:建物を4方向から撮影し、その画像をプログラムで読み込み、テクスチャキルティングを行って建物以外の背景をすべて消去
2:残った画像を繋ぎ合わせて1つの画像とする
3:その画像を何かのソフトで読み込み、3Dで建物を見れるようにする

3Dと言っても、水平方向のみグルグルと回すようにして建物を見る事のできる、擬似3Dで見れたらいいなと思っています。



図で表しますと、テクスチャキルティングで出力した画像を

C-A-B-D
※A(建物正面の画像) B(建物右面の画像) C(建物左面の画像) D(建物背面の画像)

のように1つの細長い画像にして、何らかのソフトでこれを読み込む、という事です。
テクスチャキルティングの所まではプログラムは出来ています。



特に回答して頂きたいのが
■1枚の画像を3Dで見れるようなソフトについて
■上記のソフトがない場合、どのようにしたらこのプログラムを作る事ができるか
■画像を繋げる際に気をつける点
などです。

また、言い訳するようで言いにくいのですが、プログラム知識は「やさしいC」という本を一通り読んで理解している程度で、
テクスチャキルティングのプログラムも先輩の物をなんとかいじって必死に作りました。

長々としてる上に、若干プログラムと関係ない質問で申し訳ありません。
どなたかお力添え宜しくお願いします。

以下のようなプログラムを作ろうと考えています。

1:建物を4方向から撮影し、その画像をプログラムで読み込み、テクスチャキルティングを行って建物以外の背景をすべて消去
2:残った画像を繋ぎ合わせて1つの画像とする
3:その画像を何かのソフトで読み込み、3Dで建物を見れるようにする

3Dと言っても、水平方向のみグルグルと回すようにして建物を見る事のできる、擬似3Dで見れたらいいなと思っています。



図で表しますと、テクスチャキルティングで出力した画像を

C-A-B-D
※A(建物正面の画...続きを読む

Aベストアンサー

自分で3Dの処理をがんばって作るよりも
DirectX(DirectGraphics)を使って表示したらどうでしょうか?
C++を使うのでやや敷居は高いですけど
ポリゴン作成、画像読み込み、テクスチャー貼り付け、カメラ設定等を
行えばあとは自由に見れます

QJava言語のプログラムをC言語にする場合

次の2つのJava言語のプログラムをC言語にしたいのですが、C言語でプログラムを書いたことがありません。C言語にする場合はどう書けばいいのでしょうか?

import java.io.*;

public class Sort {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try{
System.out.println("整数値を入力してください");
String line = reader.readLine();
int a = Integer.parseInt(line);

String line2 = reader.readLine();
int b = Integer.parseInt(line2);

String line3 = reader.readLine();
int c = Integer.parseInt(line3);

String line4 = reader.readLine();
int d = Integer.parseInt(line4);

int[] data = {a, b, c, d};

for (int i = 0; i< data.length - 1 ; i++) {
for (int j = i + 1; j< data.length; j++) {
if(data[i] > data[j]) {
int e = data[i];
data[i] = data[j];
data[j] = e;
}
}
}

System.out.println("昇順に並べ替えると、");
for (int i = 0; i< data.length; i++) {
System.out.print(data[i] + " ");
}

System.out.println("です。");

} catch (IOException e){
System.out.println(e);
} catch (NumberFormatException e) {
System.out.println("数式の形式が正しくありません。");
}
}
}



import java.io.*;

public class Yakusu {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try{
System.out.println("2つの整数値を入力してください");
System.out.print("整数A : ");
String line = reader.readLine();
int a = Integer.parseInt(line);

System.out.print("整数B : ");
String line2 = reader.readLine();
int b = Integer.parseInt(line2);

if(a%b == 0){
System.out.println("BはAの約数です");
} else {
System.out.println("BはAの約数ではありません");
}

} catch (IOException e){
System.out.println(e);
} catch (NumberFormatException e) {
System.out.println("数式の形式が正しくありません。");

}
}
}

次の2つのJava言語のプログラムをC言語にしたいのですが、C言語でプログラムを書いたことがありません。C言語にする場合はどう書けばいいのでしょうか?

import java.io.*;

public class Sort {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try{
System.out.println("整数値を入力してください");
String line = reader.readLine();
int a = Integer.parseInt(line);

String line2 = reader.readLine();
int b = Integer.parseI...続きを読む

Aベストアンサー

半角スペース2個を全角スペース1個に置換しています。

#include <stdio.h>

int main(void) {
 int a,b,c,d;
 printf("整数値を入力してください\n");
 scanf("%d",&a);
 scanf("%d",&b);
 scanf("%d",&c);
 scanf("%d",&d);

 int data[] = {a,b,c,d};
 int length = 4;
 int i,j,e;

 for (i = 0; i< length - 1 ; i++) {
  for (j = i + 1; j< length; j++) {
   if(data[i] > data[j]) {
    e = data[i];
    data[i] = data[j];
    data[j] = e;
   }
  }
 }

 printf("昇順に並べ替えると、");

 for (i = 0; i< length; i++) {
  printf("%d ",data[i]);
 }

 printf("です。\n");
}


#include <stdio.h>

int main(void) {
 int a,b;
 printf("2つの整数値を入力してください\n");
 printf("整数A : ");
 scanf("%d",&a);
 printf("整数B : ");
 scanf("%d",&b);

 if(a%b == 0){
  printf("BはAの約数です\n");
 } else {
  printf("BはAの約数ではありません\n");
 }
}

半角スペース2個を全角スペース1個に置換しています。

#include <stdio.h>

int main(void) {
 int a,b,c,d;
 printf("整数値を入力してください\n");
 scanf("%d",&a);
 scanf("%d",&b);
 scanf("%d",&c);
 scanf("%d",&d);

 int data[] = {a,b,c,d};
 int length = 4;
 int i,j,e;

 for (i = 0; i< length - 1 ; i++) {
  for (j = i + 1; j< length; j++) {
   if(data[i] > data[j]) {
    e = data[i];
    data[i] = data[j];
    data[j] = e;
   }
  }
 }

 print...続きを読む

QDOS画面以外(IEなど)で、C言語プログラムを操作するには?

タイトル通り、DOS画面以外でプログラムを動作させたいのですが、何をどうすればいいのか分かりません。
例えば、IE上でボタンを選択すると、プログラムを実行する・・・みたいな。
動作させるときの画面をデザインしたいのが一番の目標なので、IE以外でも良いのですが、出来ればVBなどソフトを購入してインストールが必要なものは避けたいなぁと思っています。
(またこれは出来ればでいいのですが、(IEの場合を例に考えたとして)幾つかチャックボックスがあったとして、ユーザーに当てはまる選択肢をチャックしてもらい、それがどこにチャックされたのかCのプログラム内の変数に渡す、みたいな機能もつけたいと思っています。)
何か良い方法があれば教えてください。よろしくお願い致します。

Aベストアンサー

あ、それいいなぁ~って思って調べて見たんですけど
ブラウザを使うのは結構面倒な感じです。
あまり詳しく調べた訳ではないんですけど、ブラウザと
やり取りするには簡易httpdを作って、それを起動させて
ブラウザでローカルIPにアクセスして…って事になると思います。
htmlのformを使ってPOSTするのも、httpdがPOSTコマンドを
解釈してプログラムを起動させているようなので、直接の
やりとりは無理ですし(セキュリティ面からすればあたりまえですね)。

そこまでするなら素直にwin32apiを使ってGUIのひな形を作るか、
VC系を使った方がらくだと思います。

あまり関係ないですけどhtmlを解釈してGUIのソースを作り出すツールが
あれば面白そうですねぇ。


人気Q&Aランキング

おすすめ情報