Eclipse+PyDev環境でOpenCV2.0を使う

PyDevが既にインストールされているものとします。
OpenCV2.0をProgram Filesにインストールしている場合は、C:\Program Files\OpenCV\Python2.6\Lib\site-packagesにpythonopencvライブラリが入っているので、ここにパスを通します。
Window>Preference>Pydev>Interpreter -Python>LibrariesでNew Folderを作成して、
C:\Program Files\OpenCV\Python2.6\Lib\site-packages
を追加します。
これで適当な場所にモジュールを作成してOpenCVを利用できるようになりました。
ちなみにpythonによるOpenCVのサンプルはC:\Program Files\OpenCV\samples\pythonにあります。

OpenCVの呼び出し

下のようにopencv.cv,opencv.highguiをインポートすれば利用することができます。

from opencv import cv
from opencv import highgui
from opencv.cv import *
from opencv.highgui import *

簡単なサンプル

OpenCVが提供するお馴染みの関数を使うことができます。下の例では、highgui.cvNamedWindow, highgui.cvShowImage, highgui.cvWaitKeyなどウインドウを表示させています。そしてcvCreateImageで黒い画像を生成してcv.cvLineにより線を描画しています。

from opencv import cv
from opencv import highgui

if __name__ == '__main__':

    width = 600
    height = 400
    window_name = "OpenCV with Python"

    # create the image
    image = cv.cvCreateImage (cv.cvSize (width, height), 8, 3)

    # create window
    highgui.cvNamedWindow (window_name, 1)
    cv.cvSetZero (image)
    highgui.cvShowImage (window_name, image)

    # draw a line
    pt1 = cv.cvPoint (100,100)
    pt2 = cv.cvPoint (200,200)
    cv.cvLine (image, pt1, pt2, cv.cvScalar(0, 200, 100),3, cv.CV_AA, 0)
        
    highgui.cvShowImage (window_name, image)
    highgui.cvWaitKey (0)

AS3覚え書き2 :クラス

package

パッケージを読み込むには次のようにimport文を用います。

import package名.クラス名 
import package名.*       //指定したpackage内の全てのクラスを読み込む

クラスの定義

クラスおよびメンバ変数とメソッドの定義は次のようにpackageの中に記述します。

package  
{
	public class Shape
	{
		private var color:String;
		public function draw():void {
			//statement
		}
	}
}
コンストラク

初期化のためのコンストラクタの書式は、public function クラス名(引数)となります。

package  
{
	public class Circle
	{
		private var color:String;
		private var radius:int;
		public function Circle(radius:int,color:String)
		{
			this.color = color;
			this.radius = radius;
		}
	}
}
クラスのインスタンス

インスタンスを生成するにはnewを使います。

var obj:Circle = new Circle(4,"red");
obj.draw();

静的メンバの定義

staticによってクラスのまま利用できる変数とメソッドを定義することができます。

package  
{
	public class Circle
	{
		public static var color:String;
		public static var radius:int;
		public static const SIZE:Number = 3;
		//constructor
		public static function draw():void {
			//statement
		}
	}
}
静的メンバの利用
var i:int = Circle.radius;
Circle.draw();

継承

継承にはextendsを利用します。

基底クラス
package  
{
	public class Shape
	{
		protected var color:String;
	}
}
派生クラス
package  
{
	public class Circle extends Shape
	{
		private var radius:int;
	}
}

基底クラスの初期化

派生クラスのコンストラクタ内で基底クラスを初期化する場合はsuperを呼び出します。

基底クラス
package  
{
	public class Shape
	{
		private var color:String;
		public function Circle(color:String)
		{
			this.color = color;
		}
	}
}
super文
package  
{
	public class Circle extends Shape
	{
		private var radius:int;
		public function Circle(radius:int,color:String)
		{
			this.radius = radius;
			super(color);
		}
	}
}

メソッドのオーバーライド

派生クラスのメソッドの先頭にoverrideを記述すると、基底クラスのメソッドをオーバーライドすることができます。

基底クラス
package  
{
	public class Shape
	{
		public static function draw():void {
			trace("draw shape");
		}
	}
}
派生クラス
package  
{
	public class Circle extends Shape
	{
		override public static function draw():void {
			trace("draw circle");
		}
	}
}
オーバーライドする前の基底クラスのメソッドを呼び出す

オーバーライドしたメソッドについて基底クラスのものを呼び出す場合はsuperを記述します。

package  
{
	public class Circle extends Shape
	{
		override public static function draw():void {
			trace("draw shape");
			super.draw();
		}
	}
}

オーバーライドの禁止

あるクラス以降は継承してもメソッドをオーバーライドできないようにしたい場合は、メソッドの先頭にfinalを付けます。

package  
{
	public class Shape
	{
		final public static function draw():void {
			trace("draw shape");
		}
	}
}