1. 程式人生 > 其它 >【12】opencv圖形繪製

【12】opencv圖形繪製

參考:https://blog.csdn.net/qq_28258885/article/details/112572873

線:

void line(
            InputOutputArray img, 
            Point pt1, 
            Point pt2, 
            const Scalar& color,
            int thickness = 1, 
            int lineType = LINE_8, 
            int shift = 0
        );



@param img :輸入影象。

@param pt1 :直線的第一個端點。

@param pt2 :直線的第二個端點。

@param color :直線的顏色。

@param thickness :直線的粗細程度。

@param lineType :直線型別,一共有三個:LINE_4,LINE_8,LINE_AA.其中LINE_AA是無鋸齒直線。
這裡就要注意,反鋸齒就是在畫完線後再進行渲染處理,佔用資源也就更多。根據需要去選擇是否使用。

@param shift :點座標中的小數位數,一般用預設值。可以不寫

 

方形以及橢圓:

void rectangle(
        Mat& img, 
        Rect rec,
        const Scalar& color, 
        int thickness = 1,
        int lineType = LINE_8, 
        int shift = 0
    );


@param img :輸入影象。

@param rec :一個矩形,包含四個引數,橫縱座標以及長寬。

@param color :直線的顏色。

@param thickness :直線的粗細程度。

@param lineType :直線型別,一共有三個:LINE_4,LINE_8,LINE_AA.其中LINE_AA是無鋸齒直線。

@param shift :點座標中的小數位數,一般用預設值。可以不寫

void ellipse(
        InputOutputArray img, 
        Point center, 
        Size axes,
        double angle, 
        double startAngle,
        double endAngle,
        const Scalar& color, 
        int thickness = 1,
        int lineType = LINE_8, 
        int shift = 0
    );




@param img :輸入影象。

@param center :橢圓中心。

@param axes :軸線。

@param angle :橢圓旋轉角度,單位為度。

@param startAngle :橢圓弧的起始角,單位為度。

@param endAngle :橢圓弧的終止角,單位為度。

@param color :橢圓的顏色。

@param thickness :橢圓的粗細程度。

@param lineType :橢圓線型別,一共有三個:LINE_4,LINE_8,LINE_AA.其中LINE_AA是無鋸齒直線。

@param shift :點座標中的小數位數,一般用預設值。可以不寫
若軸線的XY一樣,那麼這個橢圓就是一個圓

 

 

void circle(
        InputOutputArray img, 
        Point center, 
        int radius,
        const Scalar& color, 
        int thickness = 1,
        int lineType = LINE_8, 
        int shift = 0
    ); 


@param img:輸入影象。

@param center:圓心。

@param radius:半徑。

@param color :圓的顏色。

@param thickness :圓的粗細程度。

@param lineType :圓線的型別,一共有三個:LINE_4,LINE_8,LINE_AA.其中LINE_AA是無鋸齒直線。

@param shift:點座標中的小數位數,一般用預設值。可以不設定

 

 

設定填充

void fillPoly(
        Mat & img, 
        const Point** pts,
        const int* npts, 
        int ncontours,
        const Scalar& color, 
        int lineType = LINE_8, 
        int shift = 0,
        Point offset = Point() 
    );



@param img:輸入影象。

@param pts :多邊形頂點。

@param npts:頂點個數。

@param ncontours:邊的個數。

@param color:填充的顏色。

@param lineType :直線型別,一共有三個:LINE_4,LINE_8,LINE_AA.其中LINE_AA是無鋸齒直線。

@param shift:點座標中的小數位數,一般用預設值。可以不設定

@param offset:輪廓所有點的可選偏移。可以不設定

繪製文字

void putText( 
        InputOutputArray img, 
        const String& text, 
        Point org,
        int fontFace, 
        double fontScale, 
        Scalar color,
        int thickness = 1, 
        int lineType = LINE_8,
        bool bottomLeftOrigin = false 
    );


@param img :輸入影象。

@param text:新增的文字。

@param org:影象中文字字串的左下角。

@param fontFace:文字的字型。

@param color :文字的顏色。

@param thickness :文字的粗細程度。

@param lineType:文字的型別,一共有三個:LINE_4,LINE_8,LINE_AA.其中LINE_AA是無鋸齒直線。

@param bottomLeftOrigin:如果為真,則影象資料原點位於左下角。否則,它在左上角。

 

 

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
int main()
{
    //001 線
    cv::Mat image = cv::imread("0002.jpg");
    cv::Point a = cv::Point(0, 0);
    cv::Point b = cv::Point(360, 400);
    cv::Scalar c = cv::Scalar(48,129 ,173 );
    cv::line(image, a, b, c, 90, cv::LINE_4);
    
    //002矩形
    cv::Rect rect = cv::Rect(0, 0, 700, 700);//橫縱長寬
    cv::Scalar color = cv::Scalar(0, 255, 255);
    rectangle(image, rect, color, 10, cv::LINE_4);

    //003橢圓
    cv::Point center = cv::Point(100, 100);
    cv::Size s1 = cv::Size(image.cols / 4, image.rows / 8);
    cv::Scalar color_2 = cv::Scalar(0, 0, 255);
    cv::ellipse(image, center, s1, 40, 0, 360, color_2, 4, cv::LINE_AA);
    //(TODO)橢圓這塊還沒明白

    //004圓
    cv::Point center_1 = cv::Point(120, 60);
    cv::Point center_2 = cv::Point(60, 120);
    cv::circle(image, center_1, 100, c, 80, cv::LINE_4);
    cv::circle(image, center_2, 100, c, 80, cv::LINE_4);

    //005填充操作
    cv::Point pst[1][6];
    pst[0][0] = cv::Point(120, 350);
    pst[0][1] = cv::Point(80, 370);
    pst[0][2] = cv::Point(100, 400);
    pst[0][3] = cv::Point(140, 400);
    pst[0][4] = cv::Point(160, 370);
    pst[0][5] = cv::Point(120, 350);
    const cv::Point* ppst[] = { pst[0] };
    int npt[] = { 6 };
    fillPoly(image, ppst, npt, 1, c, cv::LINE_4);


    //006輸入文字
    cv::Point location = cv::Point(10, image.rows - 10);
    string text = "prprprprprprprprprprpr";
    putText(image, text, location, cv::FONT_HERSHEY_COMPLEX, 2, cv::Scalar(0, 0, 255), 3, 8);


    
    cv::imshow("【addLine】", image);
    cv::waitKey(0);
}