opencv學習筆記七:繪圖和註釋

藝術線條和填充多邊形

畫直線或者其他圖形(虛線,圓,矩形等)的函數都接受寬度(thickenss)和線性(lineType)的參數,這兩個都是整型的,但第二個參數的值只能是4,8或者cv::LINE__AA。thickness參數是指線寬的像素數,對於圓,矩形,和其他封閉圖形,thickenss可以設置爲cv::FULLD,這個圖形就會被用和邊界一樣的顏色填充滿。
lineType參數表示直線是“四鄰域連接”還是“八鄰域連接”或者是平滑處理。

  1. cv::circle();畫一個簡單的圓
  2. cv::clipLine();判斷一條直線是否在鄰域內
  3. cv::ellipse();畫一個橢圓(可以傾斜,或者只有部分圓弧)
  4. cv::ellipse2Poly();計算一個近似橢圓的多邊形
  5. cv::fillConvexPoly();畫一個填充的簡單多邊形
  6. cv::fillPoly();畫一個填充的任意多邊形
  7. cv::line();畫一個簡單直線
  8. cv::rectangle();畫一個簡單矩形
  9. 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;  //普通大小無襯線字體

在這裏插入圖片描述

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