C语言在opencv上创建纯色背景图,并随机生成圆 (opencv入门)
opencv2
namedWindow(“black image”, CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);// 创建一个窗口
namedWindow函数的作用是,通过指定的名字,创建一个可以作为图像和进度条的容器窗口。含有两个参数,第一个参数为创建窗口的名字,在这里我将它命名为“black image”;第二个参数为窗口标识。
INDOW_AUTOSIZE如果设置了这个值,窗口大小会自动调整以适应所显示的图像,并且不能手动改变窗口大小。
CV_WINDOW_FREERATIO :调整图像不管比例 相对于CV_WINDOW_KEEPRATIO:保持图像原比例。
也可以直接调用nameWindow(“black image”);第二个参数 int flag 默认为CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO|CV_GUI_EXPANDED。
Mat black_img = Mat::zeros(Size(560, 560), CV_8UC3);//黑色图像
这里需要定义一个Mat 类型的数据,类比于Matlab的语法,用来定义一个(行数,列数)矩阵,Mat::zeros代表将里面的元素都赋值为Scalar(0,0,0),相当于Mat::Mat(Size(560, 560), CV_8UC3, Scalar(0, 0, 0)),同理Mat::ones,赋值为Scalar(255,255,255),CV_8UC3为三通道。Scalar(B,G,R)。
circle(black_img, Point(xPos, yPos), 50, Scalar(0, 0, 255), 4, 8, 0);
circle函数用来画圆,xPos、yPos是我用随机数生成的横纵坐标,第二个参数代表圆心坐标,50是半径,4是粗细,8是线条类型,0代表偏移量。
imshow(“black image”, black_img);// 在窗口中显示图片
imshow用来在窗口里显示图像。
完整代码如下
int main(int argc, char *argv[])
{
// 初始化图像矩阵
namedWindow("black image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);// 创建一个窗口
while (1) {
Mat black_img=Mat::Mat(Size(560, 560), CV_8UC3, Scalar(0, 0, 0));//黑色图像
int xPos = rand() % 560;
int yPos = rand() % 560;
circle(black_img, Point(xPos, yPos), 50, Scalar(0, 0, 255), 4, 8, 0);
imshow("black image", black_img);// 在窗口中显示图片
if (waitKey(500) == 'q')//每500ms生成一个圆,按Q键程序结束。
break;
}
waitKey(0);// 等待一次按键,程序结束
}