我从opencv库中给出的shape.c中获取代码并进行了稍微修改。
#include <stdio.h>
#include "cv.h"
#include "highgui.h"
int main(int argc, char** argv)
{
int i = 0;
for(i=0;i<3 ;i++)
{
/* create an image */
IplImage *img = cvCreateImage(cvSize(200, 100), IPL_DEPTH_8U, 3);
/* draw a green line */
cvLine(img, /* the dest image */
cvPoint(10 +i*10, 10), /* start point */
cvPoint(150, 80), /* end point */
cvScalar(0, 255, 0, 0), /* the color; green */
1, 8, 0); /* thickness, line type, shift */
/* draw a blue box */
cvRectangle(img, /* the dest image */
cvPoint(20, 15+i*10), /* top left point */
cvPoint(100, 70), /* bottom right point */
cvScalar(255, 0, 0, 0), /* the color; blue */
1, 8, 0); /* thickness, line type, shift */
/* draw a red circle */
cvCircle(img, /* the dest image */
cvPoint(110, 60), 35+i*10, /* center point and radius */
cvScalar(0, 0, 255, 0), /* the color; red */
1, 8, 0); /* thickness, line type, shift */
/* display the image */
cvNamedWindow("img", CV_WINDOW_AUTOSIZE);
cvShowImage("img", img);
cvWaitKey(0);
cvDestroyWindow("img");
cvReleaseImage(&img);
}
return 0;
}
我希望每当I增加时,旧的图形应该被删除,只绘制新的图形。但我得到的是,除了新人物,老人物也在场。
没有直接的方法
- 初始化背景图像
- 在新克隆的背景图像上绘制前景形状
- 在克隆的背景图上绘制另一个形状
- 依次显示
创建(空白)图像时,确保imageData干净的唯一方法是自己设置纯色。cvCreateImage()
后呼叫cvSet()
IplImage *img = cvCreateImage(cvSize(200, 100), IPL_DEPTH_8U, 3);
cvSet(img, CV_RGB(0, 0, 0));
如果将窗口的创建/销毁从循环中取出,则可以提高应用程序的性能。没有必要为每个新图像创建一个新窗口:
int i = 0;
cvNamedWindow("img", CV_WINDOW_AUTOSIZE);
for(i=0;i<3 ;i++)
{
// code
}
cvDestroyWindow("img");