項目功能實現:矩形、圓形、橢圓等幾何形狀繪制,并與原圖進行相應比例融合
按照之前的博文結構來,這里就不在贅述了
一、頭文件
drawing.h
#pragma once#include<opencv2/opencv.hpp>using namespace cv;class DRAWING {
public:void drawing(Mat& image);
};#pragma once
二、函數實現
drawing.cpp
Mat backgrand, result;
定義一個畫布背景backgrand和進行融合之后的結果result
backgrand = Mat::zeros(image.size(), image.type());
背景圖片的大小和原圖一致,不過是全0的黑色背景
矩形繪制
Rect rect;
rect.x = 100;rect.y = 150;rect.width = 200;rect.height = 100;
rectangle(backgrand, rect, Scalar(255, 0, 0), -1, 8, 0);
參數一:處理的圖片對象為backgrand
參數二:矩形的相關起始點以及寬高參數信息
參數三:顏色設置
參數四:-1表示填充,其余的正整數表示線條的寬度,數越大線條越寬
參數五:8這里代表LINE_8,其他參數還有LINE_4(可用4表示)、LINE_AA((可用16表示))
每個像素點都是浮點數,連線的時候會產生鋸齒,通過相鄰8個像素點進行消除鋸齒
定義矩形的起始位置(x,y),以及矩形的高(y)和寬(x)
參數六:表示偏移量類似微調的效果,默認0即可
圓形繪制
circle(backgrand, Point(150, 150), 15, Scalar(0, 255, 0 ), 1);
參數一:處理的圖片對象為backgrand
參數二:圓心位置
參數三:半徑
參數四:顏色設置
參數五:線條寬度,-1表示填充,其他正整數表示線條粗細
線條繪制
line(backgrand, Point(100, 100), Point(200, 200), Scalar(255, 255, 255), 4, LINE_8, 0);
參數一:處理的圖片對象為backgrand
參數二:起始位置
參數三:結束位置
參數四:顏色設置
參數五:線條寬度
參數六:和上面類似,LINE_8也可通過數字8進行替代
參數七:微調,偏移量,默認0即可
橢圓繪制
RotatedRect rrt;
rrt.center = Point(200, 200);rrt.size = Size(120, 90);rrt.angle = 90.0;
ellipse(backgrand, rrt, Scalar(0, 255, 255), 2, LINE_AA);
參數一:處理的圖片對象為backgrand
參數二:橢圓繪制的相關參數信息,包括橢圓中心位置、角度等
參數三:顏色設置
參數四:線條寬度
參數五:和上面類似,LINE_AA也可通過數字16進行替代
特征融合
addWeighted(image, 0.7, backgrand, 0.3, 0, result);
原圖image和背景圖片backgrand按7:3進行融合,最終輸出結果對象為result
這里的0表示beta也是一個偏移量微調的作用
#include"drawing.h"
#include<iostream>
#include<opencv2/opencv.hpp>void DRAWING::drawing(Mat& image) {Mat backgrand, result;backgrand = Mat::zeros(image.size(), image.type());Rect rect;rect.x = 100;rect.y = 150;rect.width = 200;rect.height = 100;rectangle(backgrand, rect, Scalar(255, 0, 0), -1, 8, 0);circle(backgrand, Point(150, 150), 15, Scalar(0, 255, 0 ), 1);line(backgrand, Point(100, 100), Point(200, 200), Scalar(255, 255, 255), 4, LINE_AA, 0);RotatedRect rrt;rrt.center = Point(200, 200);rrt.size = Size(120, 90);rrt.angle = 90.0;ellipse(backgrand, rrt, Scalar(0, 255, 255), 2, LINE_AA);imshow("Drawing", backgrand);addWeighted(image, 0.7, backgrand, 0.3, 0, result);imshow("result", result);}
三、主函數
yy_main.cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include "drawing.h"using namespace cv;
using namespace std;int main(int argc, char** argv) {Mat src = cv::imread("E:/C++_workspace/beyond.jpg", IMREAD_COLOR);if (src.empty()) {printf("load image is false...\n");return -1;}namedWindow("yanyu", WINDOW_FREERATIO);imshow("yanyu", src);DRAWING yy;yy.drawing(src);waitKey(0);destroyAllWindows();return 0;
}
項目結構如下:
效果圖如下: