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;
}

實驗效果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章