こちらのページから拝借したコードで線とか円を描くプログラムを動かしてみました.
http://opencv.jp/sample/curves_and_shapes.html#draw_shapes
↓実行すると400x400のwindowが開いてこんなランダムな描画がされます.
ソースコード (cv_lines.c)
同ページのソースコードだとcvEllipse()の引数が少ないというエラーでコンパイルできません.そこのところを直したのが以下のコードです.
#include <cv.h>
#include <highgui.h>
#include <time.h>
int
main (int argc, char **argv)
{
int i;
IplImage *img = 0;
CvRNG rng = cvRNG (time (NULL));
CvPoint pt1, pt2;
CvScalar rcolor;
int irandom;
// (1)画像領域を確保し初期化する
img = cvCreateImage (cvSize (400, 400), IPL_DEPTH_8U, 3);
cvZero (img);
// (2)ランダムな線分を描画する
for (i = 0; i < 5; i++) {
pt1.x = cvRandInt (&rng) % (img->width);
pt1.y = cvRandInt (&rng) % (img->height);
pt2.x = cvRandInt (&rng) % (img->width);
pt2.y = cvRandInt (&rng) % (img->height);
irandom = cvRandInt (&rng);
rcolor = CV_RGB (irandom & 255, (irandom >> 8) & 255, (irandom >> 16) & 255);
cvLine (img, pt1, pt2, rcolor, cvRandInt (&rng) % 4, CV_AA, 0);
}
// (3)ランダムな矩形を描画する
for (i = 0; i < 5; i++) {
pt1.x = cvRandInt (&rng) % (img->width);
pt1.y = cvRandInt (&rng) % (img->height);
pt2.x = cvRandInt (&rng) % (img->width);
pt2.y = cvRandInt (&rng) % (img->height);
irandom = cvRandInt (&rng);
rcolor = CV_RGB (irandom & 255, (irandom >> 8) & 255, (irandom >> 16) & 255);
cvRectangle (img, pt1, pt2, rcolor, cvRandInt (&rng) % 5 - 1, CV_AA, 0);
}
// (4)ランダムな円を描画する
for (i = 0; i < 5; i++) {
pt1.x = cvRandInt (&rng) % (img->width);
pt1.y = cvRandInt (&rng) % (img->height);
irandom = cvRandInt (&rng);
rcolor = CV_RGB (irandom & 255, (irandom >> 8) & 255, (irandom >> 16) & 255);
cvCircle (img, pt1, cvRandInt (&rng) % (img->width / 4) + img->width / 4, rcolor,
cvRandInt (&rng) % 5 - 1, CV_AA, 0);
}
// (5)ランダムな楕円を描画する
for (i = 0; i < 5; i++) {
pt1.x = cvRandInt (&rng) % (img->width);
pt1.y = cvRandInt (&rng) % (img->height);
irandom = cvRandInt (&rng);
rcolor = CV_RGB (irandom & 255, (irandom >> 8) & 255, (irandom >> 16) & 255);
cvEllipse (img, pt1, cvSize (img->width / 2, img->height / 2), irandom % 180, irandom % 90, irandom % 90 + 90,
rcolor, cvRandInt (&rng) % 5 - 1, 8, 0);
}
// (6)画像の表示,キーが押されたときに終了
cvNamedWindow ("Drawing", CV_WINDOW_AUTOSIZE);
cvShowImage ("Drawing", img);
cvWaitKey (0);
cvDestroyWindow ("Drawing");
cvReleaseImage (&img);
return 0;
}
Makefile
INC = -I/usr/local/include/opencv
LIB = -L/usr/local/lib
OPT = -llibopencv_calib3d \
-llibopencv_contrib \
-llibopencv_core \
-llibopencv_features2d \
-llibopencv_flann \
-llibopencv_gpu \
-llibopencv_highgui \
-llibopencv_imgproc \
-llibopencv_legacy \
-llibopencv_ml \
-llibopencv_nonfree \
-llibopencv_objdetect \
-llibopencv_photo \
-llibopencv_stitching \
-llibopencv_ts \
-llibopencv_video \
-llibopencv_videostab \
-lstdc++
cclines:
gcc cv_lines.c $(INC) $(LIB) $(OPT) -o cv_lines.exe
1コマ目へ
人気ブログランキングへ
0 件のコメント:
コメントを投稿