gologiusの巣

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

OpenCV ウインドウ 枠 (ほぼ)非表示

OpenCVでウインドウの枠を非表示にしたいと思いました
f:id:kamiwo_koete:20160309110035p:plain
これのタイトルとか外枠ですね

ソースはこれ.WINAPIを使用して,ウインドウを弄ります.
環境は C++, windows7 64bit
適当に書いてるので変数などは随時補完してください

#include "windows.h"

std::string WINNAME = "test";

//ウインドウ作成
cv::namedWindow(WINNAME, CV_WINDOW_NORMAL);

//WinAPIでウインドウの設定を弄る
HWND a = FindWindow(NULL, WINNAME.c_str());  //名前からウインドウを検索 std::stringからLPCTSTR変換をしている
SetWindowLongPtr(a, GWL_STYLE, WS_POPUP); //WS_THICKFRAME : 細枠 | WS_POPUP 枠ほぼなし
SetWindowPos(a, NULL, movex, movey, width, height, SWP_DRAWFRAME | SWP_SHOWWINDOW | SWP_FRAMECHANGED); //これがないと再描画されない

cv::imshow(WINNAME, img);
cv::waitKey(0);

でこうなります.わかりにくい・・・
f:id:kamiwo_koete:20160309110835p:plain

SetWindowPosは実行しないと再描画されないみたいです.またSWP~のパラメータはこうすれば動いただけなので不必要なものがまぎれているかも

Unity5 UGUIをドラッグで移動させる

Unity5において,UGUI(PanelとかButtonなど)をドラッグで移動させます.
通常のGameObjectだとググレばすぐ出てくるのですが,GUIを動かすとなるとちょっと困りました

ソースはこれです

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;


public class Drop : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler{

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}

    public void OnBeginDrag(PointerEventData eventData)
    {
    }

    public void OnDrag(PointerEventData eventData)
    {
        GetComponent<RectTransform>().position += new Vector3(eventData.delta.x, eventData.delta.y, 0.0f);
    }
    
    public void OnEndDrag(PointerEventData eventData)
    {
    }

}

ポイントとしては
・I~Handlerの継承
・ドラッグ中のイベント「OnDrag」内で,移動量eventData.deltaを足していく
です

【追記】
GetComponent().localPosition ⇒ GetComponent().position に変更

参考
unity4.6 beta / uGUI ドラッグ編 - petlustpetlust.hateblo.jp

Unity5 Android 通信のお話

Unity5でAndroidに対応したアプリを作ろうとしたときの備忘録を二つほど
エディタ上ではうまくいくのに,Androidのアプリにした途端,通信がうまくいかなくなった

ポート番号のせい?⇒おそらく書き方の問題

ググれば腐るほど出てくるんですが,

string URL = "aaa.com";
var www = new WWW(URL, sendbytes, header);

みたいな感じでデータをPOSTすることができます.

ただ,ぼくはURLの部分を

string URL = "aaa.com:30000";

みたいにしたらエディタ画面と,Windows用にエクスポートしたゲームでは通信できるんですが,Androidだとできませんでした.
なので,嫌々

string URL = "http://aaa.com";

にして,サーバー側のポート番号も30000⇒80にしました.そしたら動きました.よくわからない

追記
おそらく"http://"から始まらないと無理っぽい

エラー吐いたら後のコードは実行されないということの再確認

ボタンを押したらスクショして送信,みたいなことしようとしてました.
ですけど送信できなかったんですよね.

原因としては,デバッグ用にローカルにスクショを保存していて,保存のパスがWindowsAndroidで互換性?がなかったからです.
IsolationStorageException吐いてました.
確認方法としては,

adb logcat | grep com.bb.aa

(com.bb.aaはUnityで設定したときのもの)
でそのアプリの出力を見てました.

で,そのエラーのあとに送信のプログラムがあったので,動いていなかった.それだけ

Unity5 Webカメラを使う

ネットに転がってるのでやったら,メモリが足りなかったり?描画順がうまくいかなかったので,自分がやった方法のメモ

これで,画面上にカメラ映像を表示させることができます

using UnityEngine;
using System.Collections;
using System.IO;

public class WebCam : MonoBehaviour {

    public WebCamTexture camTex;
    public Texture2D texture;
    
    public int width = 1280;
    public int height = 800;
    
    GameObject cameraPanel;

    // Use this for initialization
    void Start() {
        camTex = new WebCamTexture(width, height);
    
        cameraPanel = GameObject.Find("CameraPanel");
        
        camTex.Play();
    }
    
    // Update is called once per frame
    void Update() {

        cameraPanel.GetComponent<CanvasRenderer>().SetTexture(camTex);

    }
}

[追記]
対象のGameObjectはUIのRawImageを画面いっぱいに広げたもの.

UIのPlaneなんかでやると,拡大されて?おかしくなる.

Unity 文字 点滅

Unity5でUIの文字点滅させようと思いました.

ググればすぐ出ます.
が,Unity5になったからか知りませんが,そのままだと出来ませんでしたのでメモ

using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

	private GameObject textObject; //点滅させたい文字

	private float nextTime;
	public float interval = 0.8f; //点滅周期


	// Use this for initialization
    void Start()
    {
		textObject= GameObject.Find("text"); 

		nextTime = Time.time;
	}

    // Update is called once per frame
    void Update()
    {
                //一定時間ごとに点滅
		if ( Time.time > nextTime ) {
			float alpha = textObject.GetComponent<CanvasRenderer>().GetAlpha();
			if (alpha == 1.0f)
				textObject.GetComponent<CanvasRenderer>().SetAlpha(0.0f);
			else
				textObject.GetComponent<CanvasRenderer>().SetAlpha(1.0f);

			nextTime += interval;
		}

    }
}

CanvasRendererのAlpha値を弄るのがポイント

参考
[Unity] オブジェクトを点滅させるスクリプト | ftvlog


[追記]
2015/12/23
ソースを一部修正

text= GameObject.Find("text"); 
↓
textObject= GameObject.Find("text"); 

ASUS X302L 分解

ノートパソコン ASUS X302Lの分解をしてみたので報告してみる

 

といってもねじ外すだけですが・・・

ただ,一つ注意点があり,↓の部分のねじを外し,さらに中にあるねじを一つ外さないと分解できないので注意

ちなみにここを外すと(たぶん)メモリ

f:id:kamiwo_koete:20151213133425j:plain

 

ねじを全部外すと,キーボードが持ち上がります.

持ち上げる際にはプラスチックカードなどを間に挟みながらはずすとよいでしょう

f:id:kamiwo_koete:20151213133625j:plain

HDDの場所はもうわかりますね?

ここもねじが4つあるので全部外せば交換などができます

 

おしまい

 

Novikoffの定理とFreund&amp;Schapireの定理

SVMなどのクラス分類において,Novikoffの定理とFreund&Schapireの定理というものがあります.

 

適当に説明すると,ループの失敗回数が有限であることを証明した定理です.

この証明を理解したかった.

 

しかし,微妙に端折ってて,(個人的に)分かりにくいものが多かったです.

で,結局本人たちの論文の題名をキーワードに探しました.

本人たちの論文も見たのですが,以下の資料が一番わかりやすかったです

 

Novikoffの定理とFreund&Schapireの定理の証明はここの資料みるのが分かりやすいです

ユーマス・ボストン 大学
マサチューセッツ州 ボストンの大学(Wikipedia情報)

http://www.cs.umb.edu/~dsim/slidesPER.pdf

 

日本語や,単純なキーワードだけ調べるのではなく,他のアプローチから調べるの大事ですね.