項目功能實現:對多邊形進行輪廓繪制和填充
按照之前的博文結構來,這里就不在贅述了
一、頭文件
mult-drawing.h
#pragma once#include<opencv2/opencv.hpp>using namespace cv;class Mult_Drawing {
public:void mult_drawing();
};#pragma once
二、函數實現
mult-drawing.cpp
Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
定義一個畫布,大小為512*512的全0黑色圖片
Point p1(100, 100), p2(350, 100), p3(450, 280), p4(320, 450), p5(80, 400);
得到五個點的位置
pts.push_back(p1); pts.push_back(p2); pts.push_back(p3); pts.push_back(p4); pts.push_back(p5);
對這五個點進行繪制到pts上
方法一:
fillPoly(canvas, pts, Scalar(255, 0, 0), LINE_8, 0);
有了五個點的坐標位置,然后進行填充
polylines(canvas, pts, true, Scalar(0, 255, 0), 2, LINE_AA, 0);
類似,根據五個點的坐標位置進行輪廓繪制
具體的參數定義,可參考博文:十四、圖像幾何形狀繪制
參數一:要處理的圖片對象
參數二:各個多邊形點的坐標
參數三:線條顏色
參數四:鋸齒優化方法
參數五:微調偏置優化
方法二:
drawContours(canvas, contours, -1, Scalar(255, 0, 0), -1);
直接繪制,但需要輪廓的特征contours
也就是把pts這些已知的五個點的位置給扔到contours中即可
contours.push_back(pts);
像這樣
參數一:處理的圖片對象
參數二:輪廓數據信息
參數三:-1表示填充,其他正整數表示線條粗細
參數四:線條顏色
參數五:-1表示所有輪廓都繪制填充,其他正整數表示對哪個輪廓進行操作
#include"mult-drawing.h"
#include<iostream>
#include<opencv2/opencv.hpp>void Mult_Drawing::mult_drawing() {Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);Point p1(100, 100), p2(350, 100), p3(450, 280), p4(320, 450), p5(80, 400);std::vector<Point>pts;pts.push_back(p1); pts.push_back(p2); pts.push_back(p3); pts.push_back(p4); pts.push_back(p5);//方法一:得到五個點之后,先填充再繪制fillPoly(canvas, pts, Scalar(255, 0, 0), LINE_8, 0);polylines(canvas, pts, true, Scalar(0, 255, 0), 2, LINE_AA, 0);imshow("mult-drawing", canvas);//方法二:直接填充繪制std::vector<std::vector<Point>>contours;contours.push_back(pts);drawContours(canvas, contours, -1, Scalar(255, 0, 0), -1);imshow("other method", canvas);
}
三、主函數
yy_main.cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include "mult-drawing.h"using namespace cv;
using namespace std;int main(int argc, char** argv) {Mult_Drawing yy;yy.mult_drawing();waitKey(0);destroyAllWindows();return 0;
}
項目結構如下:
效果圖如下: