public Undistort() { // cvUndistort2 // キャリブレーションデータを利用して,歪みを補正する // (1)補正対象となる画像の読み込み using (IplImage srcImg = new IplImage(Const.ImageDistortion, LoadMode.Color)) using (IplImage dstImg = srcImg.Clone()) { // (2)パラメータファイルの読み込み CvMat intrinsic, distortion; using (CvFileStorage fs = new CvFileStorage(Const.XmlCamera, null, FileStorageMode.Read)) { CvFileNode param = fs.GetFileNodeByName(null, "intrinsic"); intrinsic = fs.Read <CvMat>(param); param = fs.GetFileNodeByName(null, "distortion"); distortion = fs.Read <CvMat>(param); } // (3)歪み補正 Cv.Undistort2(srcImg, dstImg, intrinsic, distortion); // (4)画像を表示,キーが押されたときに終了 using (CvWindow w1 = new CvWindow("Distortion", WindowMode.AutoSize, srcImg)) using (CvWindow w2 = new CvWindow("Undistortion", WindowMode.AutoSize, dstImg)) { CvWindow.WaitKey(0); } intrinsic.Dispose(); distortion.Dispose(); } }
public Undistort() { using (IplImage srcImg = new IplImage(FilePath.Image.Distortion, LoadMode.Color)) using (IplImage dstImg = srcImg.Clone()) { CvMat intrinsic, distortion; using (CvFileStorage fs = new CvFileStorage(FilePath.Text.Camera, null, FileStorageMode.Read)) { CvFileNode param = fs.GetFileNodeByName(null, "intrinsic"); intrinsic = fs.Read<CvMat>(param); param = fs.GetFileNodeByName(null, "distortion"); distortion = fs.Read<CvMat>(param); } Cv.Undistort2(srcImg, dstImg, intrinsic, distortion); using (new CvWindow("Distortion", WindowMode.AutoSize, srcImg)) using (new CvWindow("Undistortion", WindowMode.AutoSize, dstImg)) { CvWindow.WaitKey(0); } intrinsic.Dispose(); distortion.Dispose(); } }
public Undistort() { using (IplImage srcImg = new IplImage(FilePath.Image.Distortion, LoadMode.Color)) using (IplImage dstImg = srcImg.Clone()) { CvMat intrinsic, distortion; using (CvFileStorage fs = new CvFileStorage(FilePath.Text.Camera, null, FileStorageMode.Read)) { CvFileNode param = fs.GetFileNodeByName(null, "intrinsic"); intrinsic = fs.Read <CvMat>(param); param = fs.GetFileNodeByName(null, "distortion"); distortion = fs.Read <CvMat>(param); } Cv.Undistort2(srcImg, dstImg, intrinsic, distortion); using (new CvWindow("Distortion", WindowMode.AutoSize, srcImg)) using (new CvWindow("Undistortion", WindowMode.AutoSize, dstImg)) { CvWindow.WaitKey(0); } intrinsic.Dispose(); distortion.Dispose(); } }
public Undistort() { // cvUndistort2 // キャリブレーションデータを利用して,歪みを補正する // (1)補正対象となる画像の読み込み using (IplImage srcImg = new IplImage(Const.ImageDistortion, LoadMode.Color)) using (IplImage dstImg = srcImg.Clone()) { // (2)パラメータファイルの読み込み CvMat intrinsic, distortion; using (CvFileStorage fs = new CvFileStorage(Const.XmlCamera, null, FileStorageMode.Read)) { CvFileNode param = fs.GetFileNodeByName(null, "intrinsic"); intrinsic = fs.Read<CvMat>(param); param = fs.GetFileNodeByName(null, "distortion"); distortion = fs.Read<CvMat>(param); } // (3)歪み補正 Cv.Undistort2(srcImg, dstImg, intrinsic, distortion); // (4)画像を表示,キーが押されたときに終了 using (CvWindow w1 = new CvWindow("Distortion", WindowMode.AutoSize, srcImg)) using (CvWindow w2 = new CvWindow("Undistortion", WindowMode.AutoSize, dstImg)) { CvWindow.WaitKey(0); } intrinsic.Dispose(); distortion.Dispose(); } }
/// <summary> /// /// </summary> /// <param name="fileName"></param> private static void SampleFileStorageReadSeq(string fileName) { // cvGetHashedKey, cvGetFileNode using (CvFileStorage fs = new CvFileStorage("sequence.yml", null, FileStorageMode.Read)) { CvStringHashNode xKey = fs.GetHashedKey("x", true); CvStringHashNode yKey = fs.GetHashedKey("y", true); CvFileNode points = fs.GetFileNodeByName(null, "points"); if ((points.Tag & NodeType.Seq) != 0) { CvSeq seq = points.DataSeq; int total = seq.Total; CvSeqReader reader = new CvSeqReader(); seq.StartRead(reader, false); for (int i = 0; i < total; i++) { CvFileNode pt = CvFileNode.FromPtr(reader.Ptr); int x = fs.ReadIntByName(pt, "x", 0); int y = fs.ReadIntByName(pt, "y", 0); Cv.NEXT_SEQ_ELEM(seq.ElemSize, reader); Console.WriteLine("{0}: ({1}, {2})", i, x, y); } } } Console.ReadKey(); }
/// <summary> /// 画像データのファイルストレージからの読み込み /// <param name="fileName">読み込むXML or YAMLファイル</param> private static void SampleFileStorageReadImage(string fileName) { IplImage colorImg, grayImg; // (1)ファイルを読み込む using (CvFileStorage fs = new CvFileStorage(fileName, null, FileStorageMode.Read)) { CvFileNode node; node = fs.GetFileNodeByName(null, "color_img"); colorImg = fs.Read <IplImage>(node); node = fs.GetFileNodeByName(null, "gray_img"); grayImg = fs.Read <IplImage>(node); } // (2)ROI情報を取得し矩形を描いた後,解放 CvRect roiColor = colorImg.GetROI(); CvRect roiGray = grayImg.GetROI(); colorImg.ResetROI(); grayImg.ResetROI(); colorImg.Rectangle( new CvPoint(roiColor.X, roiColor.Y), new CvPoint(roiColor.X + roiColor.Width, roiColor.Y + roiColor.Height), CvColor.Red ); grayImg.Rectangle( new CvPoint(roiGray.X, roiGray.Y), new CvPoint(roiGray.X + roiGray.Width, roiGray.Y + roiGray.Height), CvColor.Black ); // (3)画像を描画 using (new CvWindow("Color Image", WindowMode.AutoSize, colorImg)) using (new CvWindow("Grayscale Image", WindowMode.AutoSize, grayImg)) { Cv.WaitKey(0); } colorImg.Dispose(); grayImg.Dispose(); }
/// <summary> /// 画像データのファイルストレージからの読み込み /// <param name="fileName">読み込むXML or YAMLファイル</param> private static void SampleFileStorageReadImage(string fileName) { IplImage colorImg, grayImg; // (1)ファイルを読み込む using (CvFileStorage fs = new CvFileStorage(fileName, null, FileStorageMode.Read)) { CvFileNode node; node = fs.GetFileNodeByName(null, "color_img"); colorImg = fs.Read<IplImage>(node); node = fs.GetFileNodeByName(null, "gray_img"); grayImg = fs.Read<IplImage>(node); } // (2)ROI情報を取得し矩形を描いた後,解放 CvRect roiColor = colorImg.GetROI(); CvRect roiGray = grayImg.GetROI(); colorImg.ResetROI(); grayImg.ResetROI(); colorImg.Rectangle( new CvPoint(roiColor.X, roiColor.Y), new CvPoint(roiColor.X + roiColor.Width, roiColor.Y + roiColor.Height), CvColor.Red ); grayImg.Rectangle( new CvPoint(roiGray.X, roiGray.Y), new CvPoint(roiGray.X + roiGray.Width, roiGray.Y + roiGray.Height), CvColor.Black ); // (3)画像を描画 using (new CvWindow("Color Image", WindowMode.AutoSize, colorImg)) using (new CvWindow("Grayscale Image", WindowMode.AutoSize, grayImg)) { Cv.WaitKey(0); } colorImg.Dispose(); grayImg.Dispose(); }
public Camera(int num, string calFilePath, int width, int height) { this.CameraNumber = num; this.WIDTH = width; this.HEIGHT = height; imageForHsv = new IplImage(WIDTH, HEIGHT, BitDepth.U8, 3); imageForTest = new IplImage(WIDTH, HEIGHT, BitDepth.U8, 3); BinLevel = 0; using (var fs = new CvFileStorage(calFilePath, null, FileStorageMode.Read)) { var param = fs.GetFileNodeByName(null, "intrinsic"); _fileIntrinsic = fs.Read <CvMat>(param); param = fs.GetFileNodeByName(null, "distortion"); _fileDistortion = fs.Read <CvMat>(param); } TmTimeOut = new System.Timers.Timer(); TmTimeOut.Elapsed += (sender, e) => { TmTimeOut.Stop(); FlagTimeout = true; }; }
/// <summary> /// マップのシーケンスのファイルストレージからの読み込み /// </summary> /// <param name="fileName">書きこむXML or YAMLファイル</param> private static void SampleFileStorageReadSeq(string fileName) { // cvGetHashedKey, cvGetFileNode // 二つのエントリを持つマップのシーケンスをファイルから読み込む // (1)ファイルストレージのオープン,ハッシュドキーの計算,シーケンスノードの取得 using (CvFileStorage fs = new CvFileStorage("sequence.yml", null, FileStorageMode.Read)) { CvStringHashNode xKey = fs.GetHashedKey("x", true); CvStringHashNode yKey = fs.GetHashedKey("y", true); CvFileNode points = fs.GetFileNodeByName(null, "points"); // (2)シーケンスリーダを初期化,各ノードを順次取得 if ((points.Tag & NodeType.Seq) != 0) { CvSeq seq = points.DataSeq; int total = seq.Total; CvSeqReader reader = new CvSeqReader(); seq.StartRead(reader, false); for (int i = 0; i < total; i++) { CvFileNode pt = CvFileNode.FromPtr(reader.Ptr); // (3)高速バージョン /* * CvFileNode xnode = fs.GetFileNode(pt, x_key, false); * CvFileNode ynode = fs.GetFileNode(pt, y_key, false); * Debug.Assert( * xnode != null && * (xnode.Tag & NodeType.Integer) != 0 && * ynode != null && * (ynode.Tag & NodeType.Integer) != 0 * ); * int x = xnode.DataI; * int i = ynode.DataI; * //*/ // (4)低速バージョン.x_keyとy_keyを使わない /* * CvFileNode xnode = fs.GetFileNodeByName(pt, "x"); * CvFileNode ynode = fs.GetFileNodeByName(pt, "i"); * Debug.Assert( * xnode != null && * (xnode.Tag & NodeType.Integer) != 0 && * ynode != null && * (ynode.Tag & NodeType.Integer) != 0 * ); * int x = xnode.DataI; * int i = ynode.DataI; * //*/ // (5)さらに低速だが,使いやすいバージョン ///* int x = fs.ReadIntByName(pt, "x", 0); int y = fs.ReadIntByName(pt, "y", 0); //*/ // (6)データを表示し,次のシーケンスノードを取得 Cv.NEXT_SEQ_ELEM(seq.ElemSize, reader); Console.WriteLine("{0}: ({1}, {2})", i, x, y); } } } Console.ReadKey(); }
/// <summary> /// マップのシーケンスのファイルストレージからの読み込み /// </summary> /// <param name="fileName">書きこむXML or YAMLファイル</param> private static void SampleFileStorageReadSeq(string fileName) { // cvGetHashedKey, cvGetFileNode // 二つのエントリを持つマップのシーケンスをファイルから読み込む // (1)ファイルストレージのオープン,ハッシュドキーの計算,シーケンスノードの取得 using (CvFileStorage fs = new CvFileStorage("sequence.yml", null, FileStorageMode.Read)) { CvStringHashNode xKey = fs.GetHashedKey("x", true); CvStringHashNode yKey = fs.GetHashedKey("y", true); CvFileNode points = fs.GetFileNodeByName(null, "points"); // (2)シーケンスリーダを初期化,各ノードを順次取得 if ((points.Tag & NodeType.Seq) != 0) { CvSeq seq = points.DataSeq; int total = seq.Total; CvSeqReader reader = new CvSeqReader(); seq.StartRead(reader, false); for (int i = 0; i < total; i++) { CvFileNode pt = CvFileNode.FromPtr(reader.Ptr); // (3)高速バージョン /* CvFileNode xnode = fs.GetFileNode(pt, x_key, false); CvFileNode ynode = fs.GetFileNode(pt, y_key, false); Debug.Assert( xnode != null && (xnode.Tag & NodeType.Integer) != 0 && ynode != null && (ynode.Tag & NodeType.Integer) != 0 ); int x = xnode.DataI; int i = ynode.DataI; //*/ // (4)低速バージョン.x_keyとy_keyを使わない /* CvFileNode xnode = fs.GetFileNodeByName(pt, "x"); CvFileNode ynode = fs.GetFileNodeByName(pt, "i"); Debug.Assert( xnode != null && (xnode.Tag & NodeType.Integer) != 0 && ynode != null && (ynode.Tag & NodeType.Integer) != 0 ); int x = xnode.DataI; int i = ynode.DataI; //*/ // (5)さらに低速だが,使いやすいバージョン ///* int x = fs.ReadIntByName(pt, "x", 0); int y = fs.ReadIntByName(pt, "y", 0); //*/ // (6)データを表示し,次のシーケンスノードを取得 Cv.NEXT_SEQ_ELEM(seq.ElemSize, reader); Console.WriteLine("{0}: ({1}, {2})", i, x, y); } } } Console.ReadKey(); }
// Use this for initialization void Start() { if (runCalibration) { Application.RegisterLogCallback(HandleLog); scTex = new Texture2D(KinectWrapper.GetDepthWidth(), KinectWrapper.GetDepthHeight(), TextureFormat.RGBA32, false); screenTx = new Texture2D(Screen.width, Screen.height, TextureFormat.RGBA32, false); resetPixels = new Color32[Screen.width * Screen.height]; for (int i = 0; i < resetPixels.Length; i++) { Color32 cCol = new Color32(0, 0, 0, 0); resetPixels[i] = cCol; } screenTx.SetPixels32(resetPixels); screenTx.Apply(false); GameObject.FindGameObjectWithTag("Restex").GetComponent<RawImage>().texture = screenTx; } foundCoordinatesMatrix = new Mat(); rightSideMatrix = new Mat(); //result = new Mat(11,1,OpenCvSharp.CPlusPlus.MatType.CV_64FC1); using (CvFileStorage fs = new CvFileStorage("KinectCalibration.xml", null, FileStorageMode.Read)) { string nodeName = "projectorPoints"; CvFileNode param = fs.GetFileNodeByName(null, nodeName); Mat pPts = new Mat(fs.Read<CvMat>(param), true); for (int i = 0; i < pPts.Cols; i++) { projectorCoordinates.Add(pPts.Get<CvPoint2D64f>(0, i)); } nodeName = "kinectPoints"; param = fs.GetFileNodeByName(null, nodeName); Mat kPts = new Mat(fs.Read<CvMat>(param), true); for (int i = 0; i < pPts.Cols; i++) { kinectCoordinates.Add(kPts.Get<CvPoint3D64f>(0, i)); } nodeName = "calibResult"; param = fs.GetFileNodeByName(null, nodeName); result = new Mat(fs.Read<CvMat>(param), true); fs.Dispose(); } if (result.Rows > 1) { foundResult = true; Debug.Log("Calib Loaded: " + result.Get<double>(0, 0).ToString() + " " + result.Get<double>(0, 1) + " " + result.Get<double>(0, 2) + " " + result.Get<double>(0, 3) + " " + result.Get<double>(0, 4) + " " + result.Get<double>(0, 5) + " " + result.Get<double>(0, 6) + " " + result.Get<double>(0, 7) + " " + result.Get<double>(0, 8) + " " + result.Get<double>(0, 9) + " " + result.Get<double>(0, 10) + "--" + kinectCoordinates.Count + " " + projectorCoordinates.Count); } Debug.Log(Screen.width + " " + Screen.height); }
/// <summary> /// /// </summary> /// <param name="fileName"></param> private static void SampleFileStorageReadSeq(string fileName) { // cvGetHashedKey, cvGetFileNode using (CvFileStorage fs = new CvFileStorage("sequence.yml", null, FileStorageMode.Read)) { CvStringHashNode xKey = fs.GetHashedKey("x", true); CvStringHashNode yKey = fs.GetHashedKey("y", true); CvFileNode points = fs.GetFileNodeByName(null, "points"); if ((points.Tag & NodeType.Seq) != 0) { CvSeq seq = points.DataSeq; int total = seq.Total; CvSeqReader reader = new CvSeqReader(); seq.StartRead(reader, false); for (int i = 0; i < total; i++) { CvFileNode pt = CvFileNode.FromPtr(reader.Ptr); int x = fs.ReadIntByName(pt, "x", 0); int y = fs.ReadIntByName(pt, "y", 0); Cv.NEXT_SEQ_ELEM(seq.ElemSize, reader); Console.WriteLine("{0}: ({1}, {2})", i, x, y); } } } Console.ReadKey(); }