gologiusの巣

プログラミングなどの技術メモです。誰かの役に立てるとうれしいです。

Python cv2.connectedComponentsWithStats

返り値で迷った.というかOpenCVのリファレンスPythonに厳しくないですか?

OpenCVSample/Labeling.py at master · gologius/OpenCVSample · GitHub

# -*- coding: utf-8 -*-

import cv2
import numpy as np


img = np.zeros((500,500,3),dtype=np.uint8)
for i in xrange(1,5):
    img = cv2.circle(img, (i*80,i*80), 5, (255,255,255), -1)     
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

labelnum, labelimg, contours, GoCs = cv2.connectedComponentsWithStats(gray)

for label in xrange(1,labelnum):
    x,y = GoCs[label]
    img = cv2.circle(img, (int(x),int(y)), 1, (0,0,255), -1)    
    
    x,y,w,h,size = contours[label]
    img = cv2.rectangle(img, (x,y), (x+w,y+h), (255,255,0), 1)    
    
    
print "label num ", labelnum 
print "contours ", contours
print "Gravity of Centers ", GoCs
cv2.imshow("img", img)
cv2.waitKey(-1)
cv2.imwrite("labeling.png",img)

f:id:kamiwo_koete:20161119214434p:plain

これでラベル数,ラベル付けされた画像,各ラベルを包括する矩形たち,各ラベルの重心がとれる. contours(包括する矩形)は最後にsize(矩形の面積,ピクセル数)が入ってるので注意. またcv2.circleに突っ込む場合,座標はtupleかつintでないと死ぬ

error C1001: コンパイラで内部エラーが発生しました。 とバトルした話

普通のC++で製作していたものにGUIつけようと思って,Visual StudioC++/CLI を用いて移植をしていたときに起きたエラーです.

ググっても情報量が少ない,状況も解決策もバラバラそもそもエラー説明が役に立たないのでかなり苦労しました.

私の場合の解決策は,自作クラスAを引数にする関数があり,その関数が参照渡しにすることでした.

つまり

class A 
{
}
class B
{
  void calc(A x, A y);
}

になっていたのを

class A
{
}
class B
{
  void calc(A &x, A &y)
}

にしたら直りました.

また,私の場合はEigenを class A で使用していたため,

class A
{
  void add(Eigen::Vector3f s, Eigen::Vector3f t)
}
を
class A
{
  void add(Eigen::Vector3f &s, Eigen::Vector3f &t)
}

にする必要がありました.

メタセコイア ブーリアン 失敗する条件

メタセコイアVer4.5.4の話です.

 

失敗する条件として考えられるのは

・オブジェクトが完全に重なっている場合

完全に重なっていると気づきにくい.

 

・面の方向が統一されていない

統一してください

 

思いついたら追記します.

 

解決策

・頂点数を減らしてみる

よくわからんがこれで出来た時があった.

 

Unity 物体の追従にはJointが必要な場合がある

Unityは便利なもので,Hierarchyで子要素に指定してあげると,親要素が移動回転スケール変更したときに一緒に移動回転してくれます

f:id:kamiwo_koete:20160813201205p:plain

 

ただ,それをやってくれない場合があります.

それはrigidbodyがついている場合です.

この場合,両方にrigidbodyを追加し,片方のオブジェクトにJoint類を追加します

Unityには3Dの場合

* Fixed Joint

* Spring Joint

* Hinge Joint

があります.

上記のように座標変換的に使用したい場合はFixed Jointを使用するとよい

f:id:kamiwo_koete:20160813201554p:plain

Latex bibtex コンパイルできない

いろいろ原因はあると思うのですが,僕の場合のメモ.

他の人にも適用できるかもしれないので.

 

どうにも図とbibtexコンパイルを同時にするとおかしくなる場合があるみたいです.

ですので

\bibliography{test.bib}

コメントアウトして一回コンパイル

二回目はコメントアウトを戻して普通にコンパイルする

と僕はうまくいきました.

 

 

Unity MeshFilter アクセスできない

MeshFilterはメッシュの大きさ等を取得できたりするコンポーネントです

MeshFilter f = GetComponent<MeshFilter>();
Vector3 size = f.mesh.bounds.max - f.mesh.bounds.min; //meshを包括するboxのサイズを取得(できるはず)

けどこんなエラーがでて困ってました.
Not allowed to access MeshFilter.mesh on prefab object. Use MeshFilter.sharedMesh instead UnityEngine.MeshFilter:get_mesh()

結果的にはprefabの要素にアクセスしてたのでエラーが出てました.
つまりこんな感じ

GameObject prefab = (GameObject)Resources.Load ("Prefabs/model");
MeshFilter f = prefab.GetComponent<MeshFilter>();
Vector3 size = f.mesh.bounds.max - f.mesh.bounds.min; //meshを包括するboxのサイズを取得(できるはず)

ですので,実体化?させたものを対象にすればエラーが取れました

GameObject prefab = (GameObject)Resources.Load ("Prefabs/model");
GameObject obj =(GameObject)Instantiate(prefab, Vector3.zero, Quaternion.identity);
MeshFilter f = obj.GetComponent<MeshFilter>();
Vector3 size = f.mesh.bounds.max - f.mesh.bounds.min; //meshを包括するboxのサイズを取得(できるはず)

ただ,エラーがおっしゃってる解決方法
instead UnityEngine.MeshFilter:get_mesh()
がよくわかりませんでした(使い方?がわからない)