魚眼レンズで撮影した画像って、ひずんでますよね。
これを普通に(って何が普通かと言う問題はあるけれど)直す
処理プログラムをおしえていただけませんか?

できれば、教科書的なものでなく、サンプルプログラムがあれば
うれしいんですが・・・
言語は、C以上の高級言語ならたいていわかるので
せめてポインタだけでも・・

お願いします。

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

A 回答 (3件)

代数幾何の射影変換で多分出来ると思います


通常画像を射影変換して魚眼レンズで見たような画像に出来るので魚眼レンズの射影行列の逆行列で変換してやれば元の画像に戻るはずです

元画像をN、射影行列をA、その逆行列をA^-1とした時、
NAが魚眼レンズ画像となるので、それにA^-1をかけると
NAA^-1 = N(AA^-1)
= N1
= N
で、元画像に戻ります

サンプルプログラムは「アフィン変換」や、「射影変換」などで検索すれば出てくると思います
または3D Gameのライブラリを見ればまず載っているはずです

参考URL:http://www.microsoft.com/japan/developer/library …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
うっ。た、確かに・・
レンズを通した画像は、すべて行列変換ですよね。
(基本でした)
ってことは、魚眼レンズの変換用行列(パラメータ)を
実測(か、計算)して、フィルタを作らなくちゃいけないんですね。

ん~、見えてきたような気がします。

また、3DGameの方面は、よく知らなかったので、
調べてみることにします。
URLは、NotFoundでしたけど、
たぶんDirectX6(?)のような気がするので
DirectX8とOpenGL関係も見てみます。

ありがとうございました~

お礼日時:2001/03/02 11:26

射影変換(とその一部であるアフィン変換)は直線が直線になる変


換ですから、魚眼レンズの変換や逆変換には使えませんよ。ごく一
部なら近似できるかもしれませんが。

で、まずは教科書的に。

広角を含む普通のレンズは、視野の一部を視点からDだけ離れた平
面に投影します。これに対して魚眼レンズは、まず視点を中心とし
た半径rの球面に視野全体を投影して、次にその投影した結果を平
面に垂直に投影しなおすものです。

# ただし、本物のレンズが完全にこの数学モデルどおりに働いてい
# るかどうかは、レンズの設計にもよると思うのでわかりません。

さて、この原理がわかれば、魚眼レンズと普通のレンズの間の変換
をするための式を立てることができます。

普通のレンズの画像で中心からLだけ離れた点と、魚眼レンズの画
像の中心からlだけ離れた点が対応しているとします。そうすると、
l/r = L/sqrt(D^2+L^2)
になります。つまり、
l = rL/sqrt(D^2+L^2)
ですね。同じように、普通の画像上の点P(X,Y)と魚眼の画像
上の点p(x,y)を対応させると、
x = rX/sqrt(D^2+X^2+Y^2)
y = rY/sqrt(D^2+X^2+Y^2)
となります。これは、普通→魚眼の座標変換式ですが、画像の逆変
換には逆変換の式を作るのではなく、この式をそのまま使います。
なぜなら、逆変換後の座標(X,Y)の画素の値は、逆変換前の座標
(x,y)の画素の値になるわけですから、プログラム上は(X,Y)をぐる
ぐる回して、(x,y)を求めて、その位置の値を(X,Y)の値とすればい
いからです。

プログラムを書くなら、
for (X=0;X<W;X++) {
 for (Y=0;Y<H;Y++) {
  x = r*(X-W/2)/sqrt(D*D+(X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2)) + w/2;
  y = r*(Y-H/2)/sqrt(D*D+(X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2)) + h/2;
  if (x >= 0 && x < w && y >= 0 && y < h) {
   futsuu[X][Y] = gyogan[x][y];
  } else {
   futsuu[X][Y] = black; /* or white or any */
  }
 }
}
て感じでしょうか。W,H, w,h は、それぞれの画像の幅と高さです。
ただし、x, y が画像の範囲をはみ出していないかチェックする必
要があります。

また、画質をよくするためには適当な補間法を適用します。補間法
については、
http://oshiete1.goo.ne.jp/kotaeru.php3?q=15511
で答えているので参考にしてください。

rには魚眼の画像の半径を設定します。
D/rが中心付近の倍率になります。


参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=15511
    • good
    • 3
この回答へのお礼

punchan_jpさん、ご回答ありがとうございます。
レンズのしくみから、プログラムまで、さらに画質向上の補完法まで
至れり尽くせりとはこういうことですね。
お礼に「名誉と栄光」を進呈します。いや、失敬。
 もうじき実際の画像が手に入るので、それまでに教えていただいた
プログラムをモデファイしようと思います。

あわてて締め切ってしまい「しまった~」(トヨエツ金田一風)
と思ってます。

自分の疑問が、こっちのほう「教育 > 理系の学問 > その他(理系の学問)」
だということもためになりました。
改めて、ありがとうございました。
機会があれば、結果をお知らせしたいと思います。

お礼日時:2001/03/05 16:19

魚眼(というか広角)レンズで撮った絵の中心に近いゆがみの少ない部分が


広角では無いレンズで撮った絵そのものになります。
という事で、中心のゆがみが目立たない部分だけを切り出してください。

って、これじゃ意味が無いですよね。。。(^^;

まず、ゆがみとは、平行な線が平行に写っていない事だとします。
例えば、絵の中心から八方向に平行線が出ている状態を写したとすると
それをすべて平行に変換するのは無理ですよね、。
という事で写っている範囲のすべてを変換する事はできません。

では、上下1/3くらいづつを切り取ってやるとどうでしょう?
これならば端のほうを上下に伸ばしてあげれば、それなりに見れる絵に
近似できると思います。
(上下端に近い部分は、少し横にも伸ばすほうがより良くなりますね)
アルゴリズムはCが判るという事ですので、がんばってください!
たぶん二次曲線を基準に変換すれば良いと思うのですが。

ところで、質問ではサンプルプログラムがあると嬉しいという事ですが、
そもそも画像フォーマットは何でしょうか?
質問の書き方のレベルと求める回答のレベルが違っているのではないでしょうか?

画像がbmpでしたら、上記の方法でだけですむでしょうが、
jpgなど圧縮のかかっている形式でしたらjpg→bmp変換が先になります。
jpg→bmp変換については、残念ながら私はわかりません。。(^^;
この質問のままで置いておいても答えはつかないと思うので、
フォーマット変換については検索をかけて調べるか、
新しい質問として書き込んだほうが良いですよ。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ちょいと特殊な内容なので、回答つかないかなとあきらめかけてました。
カメラ解像度は、512×512で、メモリ上に展開されます。
(っていまごろ書いても遅いんですが・・)
メモリ上なので、たとえば輝度値は、p[y][x] という感じで配列でアクセス可能です。したがって、ファイル形式変換は、考えなくていいです。
(それを先に言わんかっ!)ってすいませんでした。
で、「上下1/3切り取る」ということは、解像度が1/9!!
それわ、つらいんですけど~、でもそれしかないとなれば、やってみます。
ありがとうございました~

お礼日時:2001/03/02 11:14

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

Q最近隣補間法

 タイトルにも書いた最近隣補間法(nearest neighbor)だけでなく、共1次補間法(bilinear),3次たたみ込み補間法(cubic convolution)について、わからなくて困ってます。僕が持っている本の中にはのっていないです。3種類の特徴の違いやどういうアルゴリズムで画像の拡大・縮小をしているかが知りたいです。

Aベストアンサー

ちょっと引用ミスがありました。Pの計算のための列ベクトルの要
素が全部 f(x1) になってしまっていますが、おわかりのように、
f(x1) から順に f(x4) までです。

QOpenCV webカメラの歪み補正

現在「OpenCV プログラミングブック」で勉強を始めました。
こちらの本です↓
http://www.amazon.co.jp/gp/product/483992354X/ref=s9_simz_gw_s0_p14_i1?pf_rd_m=AN1VRQENFRJN5&pf_rd_s=center-1&pf_rd_r=1FXA1WZ0DZDCWB92J6T9&pf_rd_t=101&pf_rd_p=463376736&pf_rd_i=489986

この本を参考にして魚眼レンズを取り付けたwebカメラの歪み補正をやっています。
本のP287ページのwebカメラの歪みを補正するプログラムを実行させてwebカメラの映像の歪みをとることができました。

しかし、キャリブレーション手法を用いてるので、毎回チェックパターンを撮影しないと歪み補正をすることができません。

どうにかしてチェックパターンを撮影する手間を省いてwebカメラを起動した時に既に歪みがとれている状態にしたいのですがどうすればいいでしょうか?

この本を持っている人しかわからないかもしれませんが回答お願いします。

プログラムはこちらのサイトで配布されていたので貼っておきます。
書籍掲載のコード集:cv_prog.zip (2.1MB) というファイルのs411というフォルダに入っています。
http://book.mycom.co.jp/support/bookmook/opencv/

プログラム初心者なので専門用語などわかりやすくしてもらえると助かります。
わかりずらい説明になってしまいましたが、宜しくお願いします。

現在「OpenCV プログラミングブック」で勉強を始めました。
こちらの本です↓
http://www.amazon.co.jp/gp/product/483992354X/ref=s9_simz_gw_s0_p14_i1?pf_rd_m=AN1VRQENFRJN5&pf_rd_s=center-1&pf_rd_r=1FXA1WZ0DZDCWB92J6T9&pf_rd_t=101&pf_rd_p=463376736&pf_rd_i=489986

この本を参考にして魚眼レンズを取り付けたwebカメラの歪み補正をやっています。
本のP287ページのwebカメラの歪みを補正するプログラムを実行させてwebカメラの映像の歪みをとることができました。

しかし、キャリブレーショ...続きを読む

Aベストアンサー

一般的な回答になりますが、
キャリブレーションで求めた係数をファイル化して使用するしかありません
1.カメラ起動
 キャリブレーション用ファイルがない場合→2.
 キャリブレーション用ファイルがある場合→3.
2.キャリブレーションし歪み補正
 →ここでキャリブレーション用ファイルを作成、保存。
3.キャリブレーション用ファイルを元に歪み補正
となります。

ファイルの代わりにあらかじめデフォルトの係数をプログラム内部に埋め込むと方法もありますが、特定のデバイス固定になるため、
デフォルトのほかに別途上記のようにマニュアル補正を導入したほうがよいです。

Q魚眼画像について

魚眼レンズで得られた周囲180の円形画像について展開方法を教えてください。

このように
http://www.hh.iij4u.or.jp/~jun2/EnjoyFisheyeLens/EnjoyFisheyeLens002.html
経度にそって展開する方法

原理或いはそれを紹介するホームページいただいても幸いです。

よろしくお願いします。

Aベストアンサー

>地図を作る方向と同じのことがわかったので、現在円筒図法とメルトカル図法を検討中、もし目標画像と同じような画像できたら報告します。

メルカトル図法いいですね。
正距円筒を、どのように縦に伸ばしているのかは存じませんが、我々が地図として見ているものの多くはメルカトル図法ですよね。

興味がある人もいると思うので、トランスフォームの式を載せて頂けると嬉しいです。

Q透視投影された平面を正面から見たように変換したい

透視投影で撮影された平面を、正面から撮影したように投影変換する処理を教えてください。
または、射影ひずみの補正といわれるものでしょうか?
私なりにいろいろと調べまして、
「画像の平面内の四頂点の座標を求めることができれば、平面の傾きを求めることができる。」
というところまでたどり着きまして、平面の角度を求めるところまではいきました。
しかし、その後の行列変換がわかりません。
単に回転であれば、

1    0    0
0 cosθ -sinθ
0 sinθ cosθ


cosθ 0 sinθ
0   1    0
-sinθ 0 cosθ

をかければよいかと思っていましたが、奥行きの収縮などの関係がわかりません。
どの様な行列をかければ求めることができるのか教えてください。
このような研究をしていますが、行列は苦手なので、簡単な質問でしたらすみません。

Aベストアンサー

アフィン変換と透視投影の座標変換は以下のURLに詳しく載っていると思いますので、勉強してください。
中に座標変換の式も載っていると思います。
アフィン変換や透視投影の理解に役立つようにイメージ図のあるHPも余分にあげておきました。参考になるかと思います。

アフィン変換と透視投影
http://nis-lab.is.s.u-tokyo.ac.jp/nis/CG/cgtxt/index2.htm
http://www.geocities.co.jp/Hollywood/5174/td.html
http://www-antenna.ee.titech.ac.jp/~hira/hobby/edu/afin_trans/math_html/index.html
http://hawk.ise.chuo-u.ac.jp/makino-lab/person/itot/cg2003/cg-lecture5.pdf
http://kawanobe.rs.sanno.ac.jp/~matsunaga_y/rinkou2.pdf
http://navi.cs.kumamoto-u.ac.jp/lecture/computergrahics/2007/8.pdf

プログラムでの座標変換
http://www.saturn.dti.ne.jp/~npaka/xna/PrimitiveEx/index.html

アフィン変換と透視投影の座標変換は以下のURLに詳しく載っていると思いますので、勉強してください。
中に座標変換の式も載っていると思います。
アフィン変換や透視投影の理解に役立つようにイメージ図のあるHPも余分にあげておきました。参考になるかと思います。

アフィン変換と透視投影
http://nis-lab.is.s.u-tokyo.ac.jp/nis/CG/cgtxt/index2.htm
http://www.geocities.co.jp/Hollywood/5174/td.html
http://www-antenna.ee.titech.ac.jp/~hira/hobby/edu/afin_trans/math_html/index.html
http:/...続きを読む

QLPCWSTRとchar

質問なのです・・・

現在、私は[Visual Stdio.Net 2005]を使って、C++のプログラミングをしようと思いまして、今日参考書を見てやってみたのですが、

charの配列を使って、文字列を格納しそれを使おうとしたら、LPCWSTRのキャストが必要というエラーがでました。
参考書だと普通に通るらしいのですが・・・Visual Stdio.Net 2003と2005の違いなのでしょか?わかる方教えていただけませんでしょうか??

Aベストアンサー

補足です。
2005デフォルトのUNICODEを変更する方法は
プロジェクト->プロパティ->構成プロパティ->全般 の中にある
文字セットを[Unicode 文字セットを使用する]から[マルチバイト文字セットを使用する]
に変更することで可能です。

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

QOpenCV でのROIの指定方法について

いつもお世話になっております.
OpenCVに関する質問です.
FastFeatureDetectorやGoodFeaturesToTrackDetector等の特徴点検出器を入力画像の特定の部分に対して行うために,入力画像に対してROIを設定したのですが上手くいかない場合があって困っています.

たとえば,
入力画像(640*480)に対して,
左上(0,0)右下(640,480)や左上(0,0)右下(320,240)を矩形領域を指定すれば上手くいくのですが,
左上(10,10)右下(640,480)や左上(320,240)右下(640,480)だと,結果がズレてしまいます.

下記のソースコードで
---------------------------------------------------------------
cv::Rect* roi = new cv::Rect(roi_x, roi_y, roi_w, roi_h);
cv::Mat* InuptImage = new cv::Mat(640, 480, CV_8UC1, data);//dataはbyte型
InuptImage = new cv::Mat(*InuptImage, *roi);
---------------------------------------------------------------
(roi_x, roi_y, roi_w, roi_y)が
(0, 0, 640, 480)や(0, 0, 320, 240)の場合は上手くいくのですが,
(10, 10, 630, 470)や(320, 240, 320, 240)の場合には,特徴点の位置がずれたり,全体的に縮小されたりします.

どこに問題があるのでしょうか?

OpenCVは2.3で,言語はC++です.
アドバイス宜しくお願い致します.

いつもお世話になっております.
OpenCVに関する質問です.
FastFeatureDetectorやGoodFeaturesToTrackDetector等の特徴点検出器を入力画像の特定の部分に対して行うために,入力画像に対してROIを設定したのですが上手くいかない場合があって困っています.

たとえば,
入力画像(640*480)に対して,
左上(0,0)右下(640,480)や左上(0,0)右下(320,240)を矩形領域を指定すれば上手くいくのですが,
左上(10,10)右下(640,480)や左上(320,240)右下(640,480)だと,結果がズレてしまいます.

下記のソースコードで
---...続きを読む

Aベストアンサー

オフセットは必ず必要です。ROIを指定する前の画像の全体のサイズと、本来の画像の左上から、ROIの左上の座標のオフセットは、locateROI メソッドで取得することができます。

実際には、オフセットを考慮して点群座標を変換するか、特徴点を描画したい場合などでは、元の画像ではなく ROI で切り取った画像に対して描画を行います。


参考まで。



// okwave01.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <opencv2/opencv.hpp>

int main(int argc, char argv[])
{
const std::string FILE_PATH("lena.jpg");
//sample.bmpは640*480のRGBの画像

cv::Mat rgb_img = cv::imread(FILE_PATH);
// 画像読み込み

cv::Mat gray_img;
cv::cvtColor(rgb_img, gray_img, CV_BGR2GRAY);
// グレースケール画像に変換

const cv::Point ROI_TL(rgb_img.rows * 0.25, rgb_img.cols * 0.25);
const cv::Rect RECT(
rgb_img.rows * 0.25, rgb_img.cols * 0.25,
rgb_img.rows * 0.5, rgb_img.cols * 0.5);
// 中心 だけを切り取る ROI を作成。

cv::Mat rgbimage_roi = rgb_img(RECT);
cv::Mat grayimage_roi = gray_img(RECT);
// ROI による切り取り。


std::vector<cv::KeyPoint> corners;
// FAST 頂点座標の保存用変数

cv::FAST(grayimage_roi, corners, 10, true);

for (auto it = corners.begin(); it != corners.end(); ++it) {
cv::circle(grayimage_roi, it->pt, 1, cv::Scalar(255), 2);
// ROI を通してグレイスケール画像に書き込む

cv::circle(rgb_img, ROI_TL + cv::Point2i(it->pt), 1, cv::Scalar(0, 0xff, 0), 2);
// オフセットを考慮して直接RGB画像に書き込む
}

cv::imshow("RGB IMAGE", rgb_img);
cv::imshow("GRAY IMAGE", gray_img);
return cv::waitKey();
}

オフセットは必ず必要です。ROIを指定する前の画像の全体のサイズと、本来の画像の左上から、ROIの左上の座標のオフセットは、locateROI メソッドで取得することができます。

実際には、オフセットを考慮して点群座標を変換するか、特徴点を描画したい場合などでは、元の画像ではなく ROI で切り取った画像に対して描画を行います。


参考まで。



// okwave01.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <opencv2/opencv.hpp>

int main(int argc...続きを読む

Q歪曲収差が補正できるフリーソフト

ペンタックスk10dを使用しています。
ペンタックスフォトラボラトリーでは歪曲収差の補正できますが、
これと同様なフリーソフトはありませんでしょうか。

というのは、ときどきダンナのeosを借りて撮影するのですが
レンズがタムロンでして
どうもeosのソフトでは他社メーカーのレンズで撮影したものは
歪曲収差の補正ができないようなのです。

またコンパクトカメラを使っている友人にも教えてあげたいです。

Aベストアンサー

#6です。

私の回答ちゃんと読んでないでしょ?
当方は、バージョン2.6で、実際に確認して回答しています。

繰り返します。
--------ここから-----
メニューの
フィルタ>変形>レンズ補正
で「レンズ補正」ウィンドウが開きます。
--------ここまで-----

「変形」です。
「歪み」ではありません。

Q画像の歪みを補正するフリーソフトはありますか?

長方形の書類やスクリーンをデジカメで撮影したときに、正面からではなく、少し斜めから撮影すると、画像に歪みが生じます。
これを大体元の長方形に戻す補正が行えるフリーソフトはありますでしょうか?

長方形に戻したい部分の4つの角を指定して補正するというようなイメージです。

Aベストアンサー

GIMPで可能ですね。
入手先は以下のお好きなほうから、
http://gimp-win.sourceforge.net/stable.html (本家)
http://www.geocities.jp/gimproject2/download/gimp-download.html (日本語サイト)
「GTK+」と「TheGIMP」を両方ダウンロードして、GTK+→GIMPの順にインストールして下さい。
ちなみに設定で日本語表示可能です。

補正は「perspective(遠近法)ツール」で行えます。
ツールオプションからforward(長方形から歪ませる)とbackward(歪んだものを長方形に戻す)の選択があるのでbackwardの方で。

Qファイルやディレクトリの存在確認を行う方法

ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。

何か組み合わせて作るものなのでしょうか?
perlとか便利な演算子があるのですが、C/C++って器用ではないですね。
これは処理系?依存の内容ですか?

私の環境は VC6, VC2005 Windows2000です。

Aベストアンサー

int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);

かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング