Opencv C++ 繪製多邊形/矩形/直線
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;
//繪製直線;
void DrawLine(Mat img, Point startPoint, Point endPoint)
{
line(img, startPoint, endPoint, Scalar(0, 0, 0), 2, 8);
}
//繪製多邊形;
void DrawPolygon(Mat inputImage, vector<Point> polygonPoint, bool bIsFill, bool bIsClosed = true)
{
vector<vector<Point>> contours;
contours.push_back(polygonPoint);
if (bIsFill)
fillPoly(inputImage, contours, Scalar(255, 255, 255), 8);
else
polylines(inputImage, polygonPoint, bIsClosed, Scalar(255, 255, 255), 2, 8);
}
int main()
{
//1.創建顯示圖片
Mat imgDraw = Mat::zeros(600, 600, CV_8UC3);
//2.繪製多邊形 -- 封閉不填充
vector<Point> vPolygonPoint;
vPolygonPoint.push_back(Point(150, 50));
vPolygonPoint.push_back(Point(250, 200));
vPolygonPoint.push_back(Point(150, 350));
vPolygonPoint.push_back(Point(50, 200));
DrawPolygon(imgDraw, vPolygonPoint, false);
//3.繪製多邊形 -- 不封閉不填充
vPolygonPoint.clear();
vPolygonPoint.push_back(Point(160, 50));
vPolygonPoint.push_back(Point(260, 200));
vPolygonPoint.push_back(Point(160, 350));
DrawPolygon(imgDraw, vPolygonPoint, false, false);
//4.繪製多邊形 -- 內填充
vPolygonPoint.clear();
vPolygonPoint.push_back(Point(350, 100));
vPolygonPoint.push_back(Point(550, 100));
vPolygonPoint.push_back(Point(450, 200));
vPolygonPoint.push_back(Point(300, 200));
DrawPolygon(imgDraw, vPolygonPoint, true);
//5.繪製矩形
int nHeight = imgDraw.cols;
int nWidth = imgDraw.rows;
rectangle(imgDraw, Point(0, 6 * nHeight / 8), Point(nWidth, nHeight), Scalar(255, 255, 255), -1);
rectangle(imgDraw, Point(10, 10), Point(nWidth - 10, 6 * nHeight / 8 - 10), Scalar(255, 255, 255), 2);
//6.繪製直線
DrawLine(imgDraw, Point(0, 7 * nHeight / 8), Point(nWidth, 7 * nHeight / 8));
DrawLine(imgDraw, Point(0, 6 * nHeight / 8), Point(nWidth, nHeight));
DrawLine(imgDraw, Point(0, nHeight), Point(nWidth, 6 * nHeight / 8));
DrawLine(imgDraw, Point(nWidth/2, 6* nHeight /8), Point(nWidth/2, nHeight));
//7.顯示圖片
imshow("imgDraw", imgDraw);
waitKey(0);
destroyAllWindows();
return 0;
}
填充多邊形
void cv::fillPoly (
InputOutputArray img, //輸入圖片 繪製的圖片
InputArrayOfArrays pts, //多邊形的點集
const Scalar & color, //填充的顏色
int lineType = LINE_8, //線類型 8連通繪製
int shift = 0, //計算位數精度
Point offset = Point() //座標偏移
)
繪製多邊形
void cv::polylines (
InputOutputArray img, //輸入/繪製圖片
InputArrayOfArrays pts, //多邊形點集
bool isClosed, //是否自動封閉
const Scalar & color, //線條顏色
int thickness = 1, //線寬
int lineType = LINE_8, //繪製線條領域
int shift = 0 //計算位數精度
)
繪製矩形
void cv::rectangle (
InputOutputArray img,//輸入/繪製圖片
Point pt1, //矩形點1
Point pt2, //矩形點2
const Scalar & color, //線條顏色
int thickness = 1, //線條寬度
int lineType = LINE_8, //繪製線條領域
int shift = 0 //計算位數精度
)