(一) 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;
}
實驗效果