2009-12-07 Mon
2009-11-26 Thu
■ OpenCV の記事のサンプルがコンパイルできるようになった [D言語][OpenCV]
OpenCV の記事のサンプルが動く程度に変換した。
- cv.d
- cvtypes.d
- cxcore.d
- cxtypes.d
- highgui.d
OpenCVで学ぶ画像認識:第3回 オブジェクト検出してみよう|gihyo.jp … 技術評論社
module sample; pragma(lib,"cv200.lib"); pragma(lib,"cxcore200.lib"); pragma(lib,"highgui200.lib"); private import opencv.c.cxcore; private import opencv.c.highgui; private import opencv.c.cvtypes; private import opencv.c.cv; private import std.string; void main() { /* 画像のロード */ string imgfile = "photo.jpg"; IplImage* image = cvLoadImage(toStringz(imgfile),1); /* 正面顔検出器のロード */ CvHaarClassifierCascade* cascade = cast(CvHaarClassifierCascade*)cvLoad( "haarcascade_frontalface_default.xml" ); CvMemStorage* storage = cvCreateMemStorage(0); CvSeq* faces; /* 顔検出 */ faces = cvHaarDetectObjects(image,cascade,storage); /* 顔領域の描画 */ for(int i = 0;i < faces.total; i++) { /* extract the rectanlges only */ CvRect face_rect = *cast(CvRect*)cvGetSeqElem(faces,i); cvRectangle(image,cvPoint(face_rect.x,face_rect.y), cvPoint((face_rect.x+face_rect.width), (face_rect.y+face_rect.height)), CV_RGB(255,0,0),3); } /* 画像の表示 */ cvReleaseMemStorage(&storage); cvNamedWindow("face_detect",0); cvShowImage("face_detect",image); cvWaitKey(0); cvReleaseHaarClassifierCascade(&cascade); cvReleaseImage(&image); }
2009-11-24 Tue
■ OpenCV のサンプルがコンパイルできるようになった [D言語][OpenCV]
OpenCV のサンプルが動く程度に変換した。
- cxcore.d
- cxtypes.d
- highgui.d
トラックバーの利用 cvCreateTrackbar, cvGetTrackbarPos, cvSetTrackbarPos
module sample; pragma(lib,"highgui200.lib"); pragma(lib,"cxcore200.lib"); import opencv.c.highgui; import opencv.c.cxtypes; import opencv.c.cxcore; import std.conv; import std.string; CvFont font; IplImage* img; void main() { // (1)画像領域を確保し,初期化する img = cvCreateImage (cvSize (400, 200), IPL_DEPTH_8U, 3); cvZero (img); cvInitFont (&font, CV_FONT_HERSHEY_DUPLEX, 1.0, 1.0); // (2)ウィンドウ,およびトラックバーを作成する cvNamedWindow("Image",CV_WINDOW_AUTOSIZE); cvCreateTrackbar ("Trackbar1", "Image", null, 100, &on_trackbar1); cvCreateTrackbar ("Trackbar2", "Image", null, 100, &on_trackbar2); cvShowImage ("Image", img); cvWaitKey(0); cvDestroyWindow("Image"); cvReleaseImage (&img); } extern(C) void on_trackbar1(int val) { // (3)トラックバー2を,トラックバー1に同期させる cvSetTrackbarPos ("Trackbar2", "Image".ptr, val); // (4)トラックバー1の値を描画する cvRectangle (img, cvPoint (0, 0), cvPoint (400, 50), cvScalar (0), CV_FILLED, 8, 0); cvPutText (img, toStringz(to!(string)(val)), cvPoint (15, 30), &font, CV_RGB (0, 200, 100)); cvShowImage ("Image", img); } extern(C) void on_trackbar2(int val) { int pos1, pos2; // (5)トラックバー2の移動範囲を,トラックバー1の値±20に限定する pos1 = cvGetTrackbarPos ("Trackbar1", "Image"); if (pos1 > val) pos2 = pos1 - 20 < val ? val : pos1 - 20; else pos2 = pos1 + 20 > val ? val : pos1 + 20; cvSetTrackbarPos ("Trackbar2", "Image", pos2); // (6)トラックバー2の値を描画する cvRectangle (img, cvPoint (0, 50), cvPoint (400, 100), cvScalar (0), CV_FILLED); cvPutText (img,toStringz(to!(string)(pos2)), cvPoint (15, 80), &font, CV_RGB (200, 200, 0)); cvShowImage ("Image", img); }
2009-11-24 Tue
2009-11-20 Fri
■ 暗黙の型推論が駄目なとき [D言語][OpenCV]
OpenCV のヘッダを変換しているときに
暗黙の型推論を使うとエラーに遭遇した。
こいうヘッダのとき、
#define FOO point( 0, 0 ) typedef struct Point { int x,y; } Point; Point point(int x, int y) { Point p; p.x = x; p.y = y; return p; }
暗黙の型推論を期待して
const FOO = point( 0, 0 ); //FOO は Point 型 sruct Point { int x; int y; } Point point(int x, int y) { Point p; p.x = x; p.y = y; return p; }
こう書くと、
Error: forward reference to point
これを、
const Point FOO = point( 0, 0 );
と型を明示する用にすると回避できた。
2009-11-18 Wed
■ highgui を使ってみる [D言語][OpenCV]
OpenCV をビルドできたかな?
D言語から OpenCV を呼んでみる。
highgui200.lib を coffimplib で変換
highgui200.dll と cxcore200.dll にパスを通す。
以下のソースを作成
module test; pragma(lib,"highgui200.lib"); extern(C){ const CV_WINDOW_AUTOSIZE = 1; int cvNamedWindow(char* name,int flags); void cvDestroyWindow(char* name); int cvWaitKey(int delay); } void main() { cvNamedWindow(cast(char*)"Window".ptr,CV_WINDOW_AUTOSIZE); cvWaitKey(0); cvDestroyWindow(cast(char*)"Window".ptr); }
で、ウインドウが表示された。
リンクするライブラリはデバッグとリリースで
別のライブラリにするべきだろうか?
debug{ pragma(lib,"highgui200d.lib"); }else{ pragma(lib,"highgui200.lib"); }
2009-11-15 Sun
■ OpenCVをダウンロードしてきた [D言語][OpenCV]
インストール
OpenCV Installation Guideを読む
CMakeってのが必要
OpenCV2.0.0をビルドするを読む
ビルド