ImageJ/Fijiでフリーハンドで書いたROIの座標リストを取得したい(適当メモ)

Python Scriptingで

 

roi = IJ.getImage().getRoi()

x0 = roi.getBoundingRect().getX()
y0 = roi.getBoundingRect().getY()

x = roi.getXCoordinates()
y = roi.getYCoordinates()
length = roi.getNCoordinates()

for i in range(length):
    print x0 + x[i], y0 + y[i]

print length

 

これでROIの頂点の座標が取得できる?でも、今回はROIの線が通ったピクセルの座標を全て取得したいのでこれでは駄目。

 

そこで、以下の方法を試す。

ROI managerにROIを登録。その後、同じ大きさの黒い画像を作成し、ROI managerに登録したROIを呼び出して1pixelの白線でDraw。Python Scriptingで、

 

imp = IJ.getImage()
ip = imp.getProcessor().convertToFloat()
pixels = ip.getPixels()

on = filter(lambda i: pixels[i] > 1, xrange(len(pixels)))

width = imp.width

x = map(lambda i: i % width, on)
y = map(lambda i: i / width, on)

for i in range(len(on)):
    print x[i], y[i]

print len(x), len(y)

 

でOKのはず?もうちょっと確認が必要。

 

 

 

Macでopencv

Macopencvを使えるようにするまでのいろいろを備忘録代わりに。

正しいかどうかはあんまり自信ないので。

 

環境:

MacOS 10.7 (Lion)

Macports (2.1.2)

python (2.7.3), Numpy (1.6.2) < Macportsでinstall

 

Macportsopencvをinstall。pythonからopencvを使うためにはNumpyがinstallされてる必要がある。今回はすでに入っているのでパス。ターミナルから

 

>sudo port -d install opencv +python27

 

python2.7で使うためには+python27のoptionが必要。ちなみにこれでinstallされたopencvMacportsでinstallしたpythonでは使えるけどこのままではOS付属のpythonにはimportできないぽい。

今回installされたのはopencv2.4.2(現時点で最新のは2.4.3)。

 

次にXcodeopencvを使ってみる。

当初、Xcode4.5を使ってテストしてたんだけど、なぜかサンプルコードのビルドに失敗してしまった。結局、Xcode4.2をDeveloper siteから落としてきて入れ直したらビルドできたんだけど原因は不明。

 

New project > Command Line Tool > 適当に名前を付けてTypeをC++

 

Build settingのvalid architecturesからi386を消してx86_64のみに。header search pathに/opt/local/includeを入力。

次にBuild phasesのLink binary with libraryの追加ボタンを押してAdd otherからlibopencvを検索してlibopencv_core2.4.2.dylib, libopencv_highgui.dylib, libopencv_imgproc.dylibを追加。

そしてmain.cppに

 

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main() {
    VideoCapture capture(0);
    Mat frame;


    while (waitKey(1) != 'q') {
        capture >> frame;
        imshow("test", frame);
    }   
    return 0;
}

 

これでビルドするとiSightのカメラが起動する。qで停止。

 

次、python。エディタでtest.pyに以下のように記述。

 

import cv2

cap = cv2.VideoCapture(0)

while cv2.waitKey(1) != 'q':

    success, img = cap.read()

    cv2.imshow("test", img)

 

これをターミナル上で

 

>python2.7 test.py

 

Macportspythonを使えるように事前に/opt/local/binにパスを通しておくこと。)

これでiSightのカメラ起動したけど、qで停止しない。原因はまだ不明。