質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

AR(Augmented Reality)

AR(Augmented Reality)とは、拡張現実のことです。人が認識する現実の環境で視覚・聴覚などの知覚が感知する情報をコンピュータで拡張する技術、もしくはその環境そのものを表す言葉です。

Q&A

解決済

1回答

2922閲覧

NullReferenceException: Object reference not set to an instance of an objectを直したい

akito0705

総合スコア23

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

AR(Augmented Reality)

AR(Augmented Reality)とは、拡張現実のことです。人が認識する現実の環境で視覚・聴覚などの知覚が感知する情報をコンピュータで拡張する技術、もしくはその環境そのものを表す言葉です。

0グッド

0クリップ

投稿2019/11/30 16:36

WebカメラとOpenCVSharpを使ってARマーカの座標を取得したいと考えています。
demoにあるLiveSketchとMarker_Detectorを組み合わせることでマーカ認識自体はできたのですが、その座標を別スクリプトで使用したいです。
具体的にはLiveSketchScriptからMarkerTrackingのWStartpに座標を入れたいです。
cornerがマーカ座標だと思うのでそれを入れようとしています。
そのあと、2つのマーカの中心同士の距離を計算したいです。

現状は起動はするものの、Debug.Logで確認するとWStartpはNULLと出てしまい、下記のエラーが大量に表示されます。

よろしくお願いします。

LiveSketchScript.cs

1namespace OpenCvSharp.Demo 2{ 3 using UnityEngine; 4 using OpenCvSharp; 5 using Aruco; 6 7 public class LiveSketchScript : WebCamera 8 { 9 MarkerTracking mt; 10 protected override void Awake() 11 { 12 base.Awake(); 13 this.forceFrontalCamera = true; 14 } 15 16 // Our sketch generation function 17 protected override bool ProcessTexture(WebCamTexture input, ref Texture2D output) 18 { 19 20 // Create default parameres for detection 21 DetectorParameters detectorParameters = DetectorParameters.Create(); 22 23 // Dictionary holds set of all available markers 24 Dictionary dictionary = CvAruco.GetPredefinedDictionary(PredefinedDictionaryName.Dict6X6_250); 25 26 // Variables to hold results 27 Point2f[][] corners; 28 int[] ids; 29 Point2f[][] rejectedImgPoints; 30 31 // Create Opencv image from unity texture 32 Mat mat = Unity.TextureToMat(input); 33 34 // Convert image to grasyscale 35 Mat grayMat = new Mat(); 36 Cv2.CvtColor(mat, grayMat, ColorConversionCodes.BGR2GRAY); 37 38 // Detect and draw markers 39 CvAruco.DetectMarkers(grayMat, dictionary, out corners, out ids, detectorParameters, out rejectedImgPoints); 40 CvAruco.DrawDetectedMarkers(mat, corners, ids); 41 42 mt.WStartp = corners; 43 44 output = Unity.MatToTexture(mat); 45 46 47 return true; 48 } 49 } 50}

MarkerTracking.cs

1using OpenCvSharp; 2using OpenCvSharp.Demo; 3using System.Collections; 4using System.Collections.Generic; 5using UnityEngine; 6 7public class MarkerTracking : MonoBehaviour 8{ 9 LiveSketchScript LSS; 10 public Point2f[][] WStartp, WEndo, CStartp, CEndp; 11 //DefaultTrackableEventHandler DTE; 12 bool Count = false; 13 Vector3 WposST, WposED, CposST, CposED,Ccal; 14 float Dist; 15 // Start is called before the first frame update 16 void Start() 17 { 18 //DTE = this.gameObject.GetComponent<DefaultTrackableEventHandler>(); 19 } 20 21 // Update is called once per frame 22 void Update() 23 { 24 25 Debug.Log(WStartp); 26 if (Input.GetKeyDown("return")) 27 { 28 Debug.Log(WStartp); 29 if (Count == false) 30 { 31 //WposST = GameObject.Find("WorldMarker").transform.position; 32 //CposST = this.gameObject.transform.position; 33 34 Count = true; 35 } 36 else if(Count) 37 { 38 Ccal = CposED - (WposED - WposST); 39 Dist = Vector3.Distance(CposST, Ccal); 40 Debug.Log(Dist); 41 Count = false; 42 } 43 } 44 if(Count) 45 { 46 WposED = GameObject.Find("WorldMarker").transform.position; 47 CposED = this.gameObject.transform.position; 48 } 49 } 50} 51
NullReferenceException: Object reference not set to an instance of an object OpenCvSharp.Demo.LiveSketchScript.ProcessTexture (UnityEngine.WebCamTexture input, UnityEngine.Texture2D& output) (at Assets/OpenCV+Unity/Demo/LiveSketch_WebCam/LiveSketchScript.cs:67) OpenCvSharp.Demo.WebCamera.Update () (at Assets/OpenCV+Unity/Demo/Scripts/WebCamera.cs:145)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Debug.Log(WStartp);

WStartpにはなにも代入されてませんね。
そりゃnullですよ


もひとつ

mt.WStartp = corners;

mtになにも設定しないで(nullになってる)いきなりアクセスしてますね

投稿2019/11/30 22:52

編集2019/11/30 22:55
y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akito0705

2019/12/01 02:27

回答ありがとうございます。 mtにthis.gameobject.getcomponentを使おうとしたのですが、thisの部分にエラーが出てしまい何も入力しませんでした。 同じオブジェクトにアタッチする場合、どう書いたら良いのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問