藝術線條和填充多邊形
畫直線或者其他圖形(虛線,圓,矩形等)的函數都接受寬度(thickenss)和線性(lineType)的參數,這兩個都是整型的,但第二個參數的值只能是4,8或者cv::LINE__AA。thickness參數是指線寬的像素數,對於圓,矩形,和其他封閉圖形,thickenss可以設置爲cv::FULLD,這個圖形就會被用和邊界一樣的顏色填充滿。
lineType參數表示直線是“四鄰域連接”還是“八鄰域連接”或者是平滑處理。
- cv::circle();畫一個簡單的圓
- cv::clipLine();判斷一條直線是否在鄰域內
- cv::ellipse();畫一個橢圓(可以傾斜,或者只有部分圓弧)
- cv::ellipse2Poly();計算一個近似橢圓的多邊形
- cv::fillConvexPoly();畫一個填充的簡單多邊形
- cv::fillPoly();畫一個填充的任意多邊形
- cv::line();畫一個簡單直線
- cv::rectangle();畫一個簡單矩形
- cv::polyLines();畫多重摺線
cv::circle()畫圓函數
circle(
cv::Mat& img, //輸入圖像
cv::Point center, //輸入圓心
int radius, //半徑
const cv::Scalar& color, //線條顏色
int thickness = 1, //線寬
int lineType = 8, //線型
int shift = 0 //圓心座標點和半徑值的小數位數
);
下面代碼在一幅我們定義的圖片上繪製了一個圓;
#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
#define WINDOW_NAME "繪圖"
#define WINDOW_WIDTH 300 //定義圖像大小的宏
int main()
{
Mat img = Mat::zeros(WINDOW_WIDTH, WINDOW_WIDTH,CV_8UC3);
Point2i pt(100,100);
circle(img,pt , 50, Scalar(255, 0, 0));
imshow("WINDOW_NAME", img);
waitKey();
return 0;
}
cv::ellipse()畫橢圓函數
cv::line()畫直線
該函數在圖像img上繪製一條從pt1到pt2的直線,直線自動被圖像邊緣截斷;
line(
cv::Mat img, //輸入圖像
cv::Point pt1, //起點
cv::Point pt2, //終點
const cv::Scalar& color, //顏色
int lineType = 8, //線型
int shift = 0 //起點終點的小數位數
);
cv::rectangle()
該函數有兩種使用方法,一種傳入矩形的兩個相對的角點座標,另一種是傳入一個矩形Rect類;
rectangle(
cv::Mat img,
cv::Point pt1,
cv::Point pt2,
const cv::Scalar& color,
int lineType = 8,
int shift = 0
);
rectangle(
cv::Mat img,
cv::Rect r,
const cv::Scalar& color,
int lineType = 8,
int shift = 0
);
下面我們在之前畫圓的函數裏再加點東西:
Point2i pt1(50, 50); //矩形角點1
Point2i pt2(100, 100); //矩形角點2
Rect r(10, 10, 70, 70); //定義一個矩形
rectangle(img, pt1, pt2, Scalar(0, 0, 255));
rectangle(img, r, Scalar(0, 255, 0));
字體和文字
我們很自然的有另外一種需求,我們可以在圖片上繪製矩形,那我們也想可以給圖片加一些類似字幕的文字。這就是cv::putText()函數
putText(img, "zhouxuan", pt1, FONT_HERSHEY_SIMPLEX,1.0,Scalar(255,255,0));
// 輸入圖像 左下標 字形 大小 顏色
字形標識符:
FONT_HERSHEY_COMPLEX_SMALL; //小號版本的FONT_HERSHEY_COMPLEX
FONT_HERSHEY_SIMPLEX; //手寫體
FONT_HERSHEY_DUPLEX; //普通大小無襯線字體,比 FONT_HERSHEY_SCRIPT_SIMPLEX 更復雜
FONT_HERSHEY_COMPLEX; //普通大小無襯線字體,比FONT_HERSHEY_DUPLEX 更復雜
FONT_HERSHEY_TRIPLEX; //普通大小無襯線字體,比FONT_HERSHEY_SCRIPT_COMPLEX 更復雜
FONT_HERSHEY_SCRIPT_COMPLEX; //比FONT_HERSHEY_SCRIPT_SIMPLEX更復雜的變體
FONT_HERSHEY_PLAIN; //小號無襯線字體
FONT_HERSHEY_SCRIPT_SIMPLEX; //普通大小無襯線字體