????????介紹了繪制、填充圖像的API。也介紹了RNG類用來生成隨機數。相關API:
-
line()
-
rectangle()
-
circle()
-
ellipse()
-
putText()
代碼:
#include "iostream"
#include "opencv2/opencv.hpp"using namespace std;
using namespace cv;int main(int argc, char *argv)
{//【畫布(圖片)、窗口創建】Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);namedWindow("canvas", WINDOW_AUTOSIZE);//【相關繪制API]】//線段line(canvas, Point(10, 10), Point(400, 400), Scalar(0, 255, 255), 1, LINE_8); //API(畫布,點,點,色彩,線粗,渲染方式),渲染方式是枚舉值,LINE_AA可以實現抗鋸齒效果。//矩形Rect rect(100, 100, 200, 200); //(起始點位置,寬高)寬高不可為負值rectangle(canvas, rect, Scalar(255, 0, 0), 1, LINE_8); //API//圓形circle(canvas, Point(256, 256), 100, Scalar(0, 255, 0), 1, 8); //API(畫布,圓心,半徑,色彩,線粗,渲染方式)//橢圓RotatedRect rrt; //通過這個對象設置一些矩形數據rrt.center = Point2f(256, 256); //橢圓中心rrt.angle = 45; //旋轉角度,可以為負值,反向旋轉rrt.size = Size(100, 200); //橢圓尺幅,可以理解為把橢圓圈起來的矩形的大小ellipse(canvas, rrt, Scalar(0, 255, 255), -1, 8); //API(畫布,RotatedRect對象,色彩,線粗,渲染方式),線粗參數設置-1圖形變填充。//文字putText(canvas, "hello,world", Point(100, 50), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(0, 255, 0), 2, 8); //API(畫布,文字,起始點,字體,大小,色彩,粗細,渲染方式)imshow("canvas", canvas);//【隨機繪制】/*Mat image = Mat::zeros(Size(512, 512), CV_8UC3);Rect rect1; int x1 = 0, y1 = 0;int x2 = 0, y2 = 0;RNG rng(12345); //隨機數,參數是設置的種子。while (true){//把image轉變為純黑圖,相當于每次繪制前清空image圖片。可以去掉注釋運行看看效果。//image = Scalar(0, 0, 0);//兩個點的x,y取隨機值x1 = rng.uniform(0, 512);//0~511的范圍隨機,[0,512)y1 = rng.uniform(0, 512);x2 = rng.uniform(0, 512);y2 = rng.uniform(0, 512);//取兩點間寬高int w = abs(x2 - x1); //取絕對值int h = abs(y2 - y1);//畫線line(image, Point(x1, y1), Point(x2, y2), Scalar(rng.uniform(0, 256), rng.uniform(0, 256), rng.uniform(0, 256)), 1, LINE_8);//畫矩形rect1.x = x1;rect1.y = y1;rect1.width = w;rect1.height = h;rectangle(image, rect1, Scalar(255, 0, 0), 1, LINE_8);imshow("image", image);//按下任意鍵(英文輸入法)退出循環,停止隨機繪制if (waitKey(10) >= 0){break;}}*/waitKey(0);destroyAllWindows();return 0;
}
除了幾個API的使用要了解,還要了解這段代碼中用到的各種類對象相關內容。
-
Rect
-
RotatedRect
-
RNG
-
.uniform(),[x,y)
這里分別用于了矩陣,橢圓的繪制,以及獲取隨機數。
演示: