線分AB、CDがあったときに、その交点を求めるには? 要素は2次元空間内に存在するものとします。 解説 線分AB上の任意の点Pは、媒介変数 r を用いて、以下のように表現できます。 P = A + r ( B - A ) ( r は[0~1]の値を取る) ・・・式① 同様に、CD上の任意の点Qも、媒介変数 s を用いて、以下のように表現できます。 Q = C + s ( D - C ) ( s は[0~1]の値を取る) ・・・式② PとQが同一点になる場合の r と s を求めれば、ABとCDの交点は求まったことになります。 というわけで、P = Q を解きます。 P = Q ⇔ A + r ( B - A ) = C + s ( D - C ) X、Yに関する連立方程式にします。 ⇔ Ax + r ( Bx - Ax ) = Cx + s ( Dx - Cx ) Ay + r ( By
マルチチャンネルと多次元配列¶ OpenCV 2.2 以降,2次元配列用の cv::Mat クラスと,多次元配列用の cv::MatND クラスが統一されました.つまり,現在は, cv::Mat で任意次元の配列を表現します. しかし,今まで cv::Mat を引数に取っていた関数が,すべて「多次元(>=3次元)」の Mat に対応しているとは限らないので注意が必要です. OpenCVの構造には,次元とチャンネルの概念があります. チャンネル(channel):要素の次元 次元(dimension):複数の要素からなる配列の次元 マルチチャンネル多次元配列の例(Dim=2 Ch=2, Dim=2 Ch=1, Dim=2 Ch=3, Dim=3 Ch=4): 上記の例のように, や の配列は,1次元ベクトルではなく,1行の2次元行列と見なされることに注意してください.つまり,Mat の次元は
OpenGL de プログラミング トップページページ一覧メンバー編集 sequence編02 最終更新: mikk_ni3_92 2010年02月10日(水) 18:59:19履歴 Tweet 現在地 >> メニュー >> OpenCV >> sequence編02 INDEX:sequence編01<< sequence編02 >> sequence編03 目次 目次 ハフ変換の直線検出 使い方 データを取り出す1 データを取り出す2 サンプルコード1 ハフ変換による円の検出 データを取り出す サンプルコード2 ハフ変換の直線検出 ハフ変換の詳細は略。(codezine:javaを使った丁寧な説明をされております) ただ、次の事は覚えておきたい。 (x, y)を通過する全ての直線群は、一本のHough曲線で表される。 パラメータ平面上の一点は、直線一本に対応する。 直線検出には「cvH
OpenCVの重要な型 Mat OpenCVでは画像をMat型として扱う。 Matの扱い方がわかれば、画像を自由に操れる。 ここでは、「知っておくと得するMat豆知識」をご紹介しよう。 なお、この投稿では輝度画像のみを対象とする。 Matの要素を取得 Mat image(Size(100, 200), CV_8U, Scalar::all(0)); uchar pixel = image.at<uchar>(100, 50); 素朴なプログラムでは各要素にアクセスすることが多くなる。 at<データ型>(y, x) だ。データ型を指定する必要があるってことと、x, yの順番が逆なことに注意だ。 どうして(x, y)じゃないのか? それは行列だから。(行、列)の順に指定するのだ。 (ちなみにメモリ上でも行ごとにまとまっている。 のちのち重要になってくる知識) このatはデバッグモードだと非常に
私的なプログラミングメモ プログラミングに関する私的メモ(現在:OpenGL・OpenCV・ARToolKit・Kinect・Unity) トップページページ一覧メンバー編集 カメラキャリブレーション 最終更新: pafuhana1213 2012年07月13日(金) 14:19:58履歴 Tweet 自分用・OpenCV2.3用 //プロジェクトのプロパティ⇒C/C++⇒全般 の追加のインクルードディレクトリに // 『C:\OpenCV2.3\include』を追加のこと #include "opencv2\\opencv.hpp" #include <stdio.h> #include <string.h> #include <time.h> #include <iostream> #include <string> #include <vector> #include <fstre
:::::::::::KinectカメラをOpenCVでキャリブレーションする方法::::::::::: OpenCVにはカメラをキャリブレーションする機能(内部と外部のパラメータを推定する関数)が用意されています。 Kinect カメラを OpenCV でキャリブレーションする方法をここにまとめます。 次のコードを実行します。それだけです。 使用方法: 'c'ボタンでjpgファイルをキャプチャーします。 'q'ボタンでキャプチャーした画像を用いてキャリブレーションを行います。 キャリブレーション結果を表示して、CameraParam.xml ファイルに結果を出力します。 次回以降、これを初期値として利用します。 XMLファイルからカメラ行列と歪み係数行列を取得する方法はハイライトしている行を参考にしてください。 実行結果↓(左が元画像、右が歪み補正を行った画像です。) 結果から、Kine
今回は、OpenCVに実装されているカメラキャリブレーションの概要についてご紹介します。カメラキャリブレーションは、レンズ焦点距離などの内部パラメータ、カメラの位置・姿勢を表す外部パラメータ、レンズの歪収差係数を求め、画像を補正する処理です(図1)。Zhangの手法が有名で、OpenCVに実装されていることもあり、世界で最も用いられています。ライブラリ化されているため誰でも簡単に利用することができますが、その反面キャリブレーションの処理について知らなくても実装できてしまいます。本記事では、そのOpenCVに実装されているZhangの手法の理解を深めていただければと思います。 内部パラメータ(Intrinsic parameters)、外部パラメータ(Extrinsic parameters)、歪収差係数(distortion coefficients)については、ここでは説明を割愛しますの
カメラはレンズを通して撮影するのですが、その場合どうしても映像がゆがんでしまいます。 直線を撮影しても少し歪むんです。 その歪みを治すためのプログラムが、元々OpenCVには入っています。 今回はそれを使ってみます。 歪みの直し方 歪はどのぐらい歪んでいるかを検出できれば直せます。上の画像のようにチェスボードの模様を歪を治したいカメラで撮影して、この直線がどのぐらい歪んでるかで補正することができるわけです。OpenCVにはチェスボード模様を使った補正関数が元々用意されています。 まずは複数枚撮影 まずは歪んでる写真を取りましょう。 チェスボード画像は http://opencv.jp/sample/pics/chesspattern_7x10.pdf からダウンロードできます。これを印刷しましょう。 そしてカメラで何度か撮影します。できればカメラは同じ位置の方が良いです。 その時に色々な位
ふと、oFのフォーラムでこんな動画を見かけた。 Elastic Reality フェイスモーフって前から面白そうだなと思ってたんだけど、 実際、案件とかで作れって言われたら自分だったらどう作るかなーと興味が出たので やってみた。 ※著作権的に公に公開出来そうなテスト用顔写真ってなかなかない・・ とりあえず自分の写真以外にUPしても怒られなさそうな弊社アニメ好きディレクターの写真を採用、、(ゴメンナサイ) で、どうやるかというと、実際カラクリはそんな難しい事じゃなくて、 openFramewokrsのofxFaceTrackerでとりあえず2枚の画像から顔認識させて三角形のメッシュを作る。 顔画像A上と顔画像B上のそれぞれ目、鼻、口の位置にあるUV座標をそれぞれ全く同じ動きさせる。 各画像を重ねて表示してアルファフェードでなじませているだけという単純な仕組み。 とりあえずそれとなくいい感じに
OpenCVのcv::Matクラスに格納された画像データの各画素にアクセスする方法を、以下の2種類ご紹介する。 atメソッドを用いる方法 dataメソッドを用いる方法 画素にアクセスする回数が少ないのならatメソッド、全画素に順番に読み出すなど頻繁に画素にアクセスするのならdataメソッドを用いる方法が良いと思う。 atメソッドを用いる場合 画素をピンポイントで読んだり書いたりするには、atメソッドを使う。ただし、atメソッドを使うには、Matクラスが1画素あたり何バイトからなるのかを事前に知っていないといけない。 例:白黒画像の場合 1画素の濃淡は1バイト(0〜255)で表されるので、以下のようになる。 cv::Mat img = cv::imread("cat.jpg"); int intensity = img.at<unsigned char>(y, x); //X座標がx, Y座
記事の粒度が安定しませんが、メモ代わり。 斜めに撮影された被写体を、真正面から見据えたい場合の画像処理。 左側が入力画像と、選択領域。右側が出力画像と、見据えた方向の領域。 左画像で4点選び、右画像で4点選ぶ。 warp_matrix = cv::getPerspectiveTransform(srcQuad, dstQuad); cv::warpPerspective(m_src, m_dst, warp_matrix, m_src.size() ); https://gist.github.com/3f4ed7dfa0491b2c1f20.git https://gist.github.com/ac5e0d2c712b2ee99b57.git
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く