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

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

A 回答 (1件)

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


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

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

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

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

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

Q画像の大きさでピクセルとセンチの違い

初心者です。画像の拡大縮小で、ピクセル表示とセンチやミリ単位の
表示がありますが、
ピクセルの単位がセンチやミリに対しての違いが分かりません。
よろしくお願い致します。

Aベストアンサー

ピクセルの単位表示が絶対値です。

それに対して、センチやミリ、インチなどの長さでの表示の場合、相対値になります。
 ※同じ1センチであっても、その解像度によって、画像のサイズはさまざまです。
  
  仮に、解像度100ピクセル/センチの画像、10センチは、1000ピクセルですが、・・・
  解像度200ピクセル/センチの画像であった場合、10センチは、2000ピクセルになります。

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

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

Aベストアンサー

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

Q1ピクセルって何センチ?

1ピクセルをセンチであらわすことってできるんですか?

Aベストアンサー

こんにちは。

ピクセルは長さの単位ではありません。
ご存知のとおりPCは小さな点の集まりで文字や画像を表示しますが、
その小さな点のことを「ピクセル」と呼んでいます。

ピクセルの大きさは、表示する機器の性能や、解像度の設定により一定しませんので、
単純に何cmです、と答えることはできません。

プリンタの宣伝やカタログなどで、
「dpi」という言葉をご覧になったことはないでしょうか。
Dot Per Inch の略で、1インチにいくつのドット(ピクセル)があるか、を表す単位です。
逆に言えばこの値が決まると、ピクセルの大きさも決まることになります。

たとえば、これが1440dpiであるとき、
1つのドット(ピクセル)の大きさは1/1440インチです。

したがって、1インチ=約2.54cmとするとき、
1/1440 * 2.54cm ≒ 0.00176cm = 0.0176mmです。

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];
をわかりやす...続きを読む

Qピクセルアスペクト比の変換

何度か質問したことがあるのですが、質問が的確でなかったため有用な回答が得られていません。
アスペクト比が4:3、16:9などのサイズがあることはわかります。
しかし、単純な比率ではなく、ピクセル比が異なるため単純な比率でサイズが割り出せないので困っています。
ピクセル比には4:3は正方形と16:9は長方形なのが要因のようです。

本格的な制作ソフトでは、自動的に設定されるらしいですが、今回使用するCGソフトでは正方形のピクセルでしか出力できません。
そこでハイビジョンに相当する比率の映像を正方形ピクセルで出力して、後で長方形ピクセルに変えることができないか模索しています。

質問をまとめますが、
1.ハイビジョンの1920×1080相当の映像を正方形ピクセルで出力するには、どのようなサイズで出力すればよいか。
2.出力した正方形ピクセルの映像を横長ピクセルに変換するソフトはあるか(できればフリーソフト)

うまく説明できませんが、画面の両側に黒帯を入れたり、映像両側に引き伸ばしたりしなくてもぴったり収まるようにしたいのですが。

Aベストアンサー

やはり、通常は
4:3の正方形ピクセルの動画を16:9に収めるは
黒帯を付けたくないなら、拡大して横幅を合わせたのち
上下をカットするしかありません。

このHD→SD変換方法などサイトの一番下に書いてあります。
http://www.edius.jp/cre_lab/knowledge02.html


>1.ハイビジョンの1920×1080相当の映像を
正方形ピクセルで出力するには、どのようなサイズで出力すればよいか。


・正方形ピクセルを維持するなら
16:9を固定して画素数を(縦、横長さ)変更して書き出すしかないと思われます。

例)1280×720や780×440(439ですが四捨五入して繰り上げました)

adobe aftereffectsなら動画の対比や画素数(縦、横)は好みで書き出すことができます。
※adobe premiereではできません。



>2.出力した正方形ピクセルの映像を横長ピクセルに変換するソフトはあるか


・「adobe aftereffects cs5」でマウスカーソルを使って
横伸びしたりしたり縮んだりした正常でない
縦横ピクセルの動画を正方形ピクセルに調整することはできます。
その逆の正方形を長方形もできます。


フリーソフトは、何個か使ったことがありますが
こういうことが出来るのは、まだ見たことはないです。

やはり、通常は
4:3の正方形ピクセルの動画を16:9に収めるは
黒帯を付けたくないなら、拡大して横幅を合わせたのち
上下をカットするしかありません。

このHD→SD変換方法などサイトの一番下に書いてあります。
http://www.edius.jp/cre_lab/knowledge02.html


>1.ハイビジョンの1920×1080相当の映像を
正方形ピクセルで出力するには、どのようなサイズで出力すればよいか。


・正方形ピクセルを維持するなら
16:9を固定して画素数を(縦、横長さ)変更して書き出すしかないと思われます。

例)1280...続きを読む

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

おはようございます。

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

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

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

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

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

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

Aベストアンサー

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

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

Q1ピクセル単位の線画に変換する。

スキャナで手書きの線画を取り込み、添付画像のような1ピクセル単位の線画に変換するソフトはありますか。

Aベストアンサー

Photoshopがあるのならば、「色調補正」→「2階調化」で出来ます。Ver.4にこの機能があったかどうか記憶にないですが、ない場合は、「明るさ/コントラスト」 でコントラストを最大にした上で明るさを変えることで同等の事ができます。

その上で、モードをモノクロ2階調(出力解像度=入力解像度/「50%を基準に2階調に分ける」)に変換するとよいです。


思ったようにならない場合、元のグレー画にわずかなぼかしを加えた上で、「2階調化」或いは「明るさ/コントラスト」を適用してください。多少は融通が利くようになります。

*CS3以降は「明るさ/コントラスト」の動きが変わっていますので、その場合、「従来方式を使用」にチェックを入れます。


 

Q画像処理 C言語 元画像の幅と高さ

Cで画像処理を勉強しています。
img.nHeightやimg.nWidthのように読み込んだ元画像の幅と高さを表す変数はないのでしょうか。
教材では、幅と高さは手動で打つようになっていました。

Aベストアンサー

読み込んだ画像の種類によってはその中に大きさなどを記載しているものもありますし、全体を(または1行)取り込んで見ないと判断できないものがあります

Windowsなどで使われる BMPファイルならファイルの先頭のある部分に
幅や高さなどの記述がありますよ

Qイラストレーターファイルをbmp変換するときのピクセルサイズの調整のやり方が分かりません

イラストレーターファイル(.ai)はベクトル形式ですが、画像を使用するときに128x128ピクセルの.bmpファイルに変換しなければなりません。

一度フォトショップから.aiファイルを開いてしまえば、128x128ピクセルの.bmpファイルに切り取るのは簡単ですが、もしイラストがいっぱいの大きさでなかったらフォトショップの中で拡大しなければならないので、画質が劣化してしまいます。それを防ぐためにはイラストレーターでサイズを調整しなければいけません。しかし、その際にファイル移植後のピクセルサイズの調整の仕方が分からなくて困っています。

ちなみにIllustrator CS2 を使っています。

どうぞ、ご回答お願いします。あらかじめ、ありがとうございました!

Aベストアンサー

アートボードをピクセル寸法にする事ができます。

環境設定の単位で変更してみてください。
アートボードのサイズは書類設定で変更できます。

書き出し時に72dpiで書き出せば上手くいくはずです。

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ピクセルの画像の右端と重なります。

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


人気Q&Aランキング