Opencv学习笔记(六) -------绘制形状与文字

(一) point与Scalar

Point表示二维平面的一个点
P = Point(30,50);

Scalar表示颜色
Scalar(a,b,c); // a = blue ,b = green ,c = red

(二) 绘制图形

Cv::line 画线
Cv::ellipse 画椭圆
Cv::rectangle 画矩形
Cv::circle 画圆
Cv::fillpoly 画填充多边形

(三)随机数生成
生成高斯随机数gaussian(double sigma)
生成正态分布随机数 uniform(int a,int b)

(代码部分一)

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

using namespace cv;
using namespace std;

Mat myimage;

void MyLine();
void MyRect();
void MyEllipse();
void MyCircle();
void MyPolygon();
void RandDemo();
int main(int argc, char** argv)
{
	myimage = imread("D:/picture/Curry.jpeg");

	if (myimage.empty())     //如果没有找到图片
	{
		printf("could not find picture.....\n");
		return -1;
	}
	MyLine();         //画一根线
	MyRect();         //画一个矩形
	MyEllipse();      //画一个椭圆
	MyCircle();       //画一个圆
	MyPolygon();      //画一个实心多边形
	putText(myimage, "Stephen Curry", Point(0, 300), CV_FONT_BLACK, 1.0, Scalar(23, 155, 25), 1, LINE_8);
	namedWindow("input image", CV_WINDOW_AUTOSIZE);
	imshow("input image", myimage);
	//RandDemo();

	waitKey(0);   //等待
	return 0;
}

void MyLine()
{
	Point p1 = Point(30, 30);
	Point p2 = Point(30,200);

	Scalar color = Scalar(12, 123, 255);
	line(myimage, p1, p2, color, 1, LINE_8);
}

void MyRect()
{
	Rect rect = Rect(20, 200, 50, 50);
	Scalar color = Scalar(30, 255, 50);

	rectangle(myimage, rect, color, 2, LINE_8);
}

void MyEllipse()
{
	Scalar color = Scalar(255, 32, 55);
	ellipse(myimage, Point(150, 150), Size(50, 10), 60,0, 360, color,3,LINE_8);
}

void MyCircle()
{
	circle(myimage, Point(50, 150), 50, Scalar(255, 255, 123), 2, LINE_8);
}

void MyPolygon()
{
	Point pts[1][5];
	pts[0][0] = Point(100, 100);
	pts[0][1] = Point(100, 150);
	pts[0][2] = Point(150, 150);
	pts[0][3] = Point(150, 100);
	pts[0][4] = Point(100, 100);
	
	const Point* ppts[] = { pts[0] };
	int npts[] = { 5 };
	Scalar color = Scalar(255, 33, 255);
	fillPoly(myimage, ppts,npts,1,color,LINE_8);
}

void RandDemo()
{
	RNG rng(12345);
	Point ptr1;
	Point ptr2;
	
	Mat img = Mat::zeros(myimage.size(), myimage.type());
	namedWindow("output image2",CV_WINDOW_AUTOSIZE);
	for (int i = 0; i < 20000; i++)
	{
		ptr1.x = rng.uniform(0, myimage.cols);
		ptr2.x = rng.uniform(0, myimage.cols);
		ptr1.y = rng.uniform(0, myimage.rows);
		ptr2.y = rng.uniform(0, myimage.rows);
		Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
		circle(img, ptr1, rng.uniform(0, 50), color, 2, LINE_8);
		//line(img, ptr1, ptr2, color, 1, LINE_8);
		imshow("output image2", img);
		if (waitKey(50) > 0)
		{
			break;
		}
	}
}

实验效果
在这里插入图片描述
(代码部分二)

int main(int argc, char** argv)
{
	myimage = imread("D:/picture/Curry.jpeg");

	if (myimage.empty())     //如果没有找到图片
	{
		printf("could not find picture.....\n");
		return -1;
	}/*
	MyLine();         //画一根线
	MyRect();         //画一个矩形
	MyEllipse();      //画一个椭圆
	MyCircle();       //画一个圆
	MyPolygon();      //画一个实心多边形
	putText(myimage, "Stephen Curry", Point(0, 300), CV_FONT_BLACK, 1.0, Scalar(23, 155, 25), 1, LINE_8);
	namedWindow("input image", CV_WINDOW_AUTOSIZE);
	imshow("input image", myimage);*/
	RandDemo();

	waitKey(0);   //等待
	return 0;
}

实验效果
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值