format_list_bulleted
【C++/OpenCV】C++とOpenCVを用いて線・円・四角形(長方形・正方形)を描画する方法を解説
最終更新日時:2022-03-07 06:44:01



本記事ではC++とOpenCVを用いて線・円・四角形(長方形・正方形)を描画する方法を解説します。

線の描画

線の描画について解説します。線の描画で使用する関数はcv::lineという関数です。cv::lineの引数は以下の通りです。

また、連結の種類を表に示します。何が違うのかは、実行結果を見てみてください。


cv::line(画像の変数, cv::Point(始点のx座標,始点のy座標),cv::Point(終点のx座標,終点のy座標), cv::Scalar(,,),線の太さ,(連結の仕方));
4連結cv::LINE_4
8連結cv::LINE_8
アンチエイリアスcv::LINE_AA

サンプルコード

こちらが線を描画するためのサンプルコードです。それぞれコメントにて説明してあります。

タイトル:line.cpp

#include <opencv2/opencv.hpp>
#include <iostream>

int main(void)
{   
    //空の画像生成(500ピクセルの正方形の画像)
    cv::Mat image = cv::Mat::zeros(cv::Size(500,500), CV_8UC3);

    // cv::line(画像の変数, cv::Point(始点のx座標,始点のy座標),cv::Point(終点のx座標,終点のy座標), cv::Scalar(青,緑,赤),線の太さ,(連結の仕方));
    //始点(50,0),終点(400,50)に線の太さ2の4連結の直線を描画(赤)    
    cv::line(image, cv::Point(50,0),cv::Point(400,300), cv::Scalar(0,0,255),2,cv::LINE_4);
    //始点(50,50),終点(400,350)に線の太さ2の8連結の直線を描画(緑)
    cv::line(image, cv::Point(50,50),cv::Point(400,350), cv::Scalar(0,255,0),2,cv::LINE_8);
    //始点(50,100),終点(400,400)に線の太さ2のアンチエイリアスの直線を描画(青)
    cv::line(image, cv::Point(50,100),cv::Point(400,400), cv::Scalar(255,0,0),2,cv::LINE_AA);
   
    //画像の表示
    cv::imshow("showing",image);
    cv::waitKey(0);
    
    return 0;
}

実行結果

画像を見ると4連結・8連結の線はギザギザしているように見えますが、アンチエイリアスの線はそうのようなギザギザがないように見えます。

線の描画(line)

円の描画

円の描画について解説します。円の描画で使用する関数はcv::circleという関数です。cv::circleの引数は以下の通りです。

cv::circle(画像の変数, cv::Point(x座標,y座標), 半径, cv::Scalar(,,), 線の太さ(-1の時は塗りつぶし),(連結の仕方));

サンプルコード

こちらが円を描画するためのサンプルコードです。それぞれコメントにて説明してあります。

タイトル:circle.cpp

#include <opencv2/opencv.hpp>
#include <iostream>

int main(void)
{   
    //空の画像生成(500ピクセルの正方形の画像)
    cv::Mat image = cv::Mat::zeros(cv::Size(500,500), CV_8UC3);

    //cv::circle(画像の変数, cv::Point(x座標,y座標), 半径, cv::Scalar(青,緑,赤), 線の太さ(-1の時は塗りつぶし),(連結の仕方));
    //(100,400)に半径50,太さ5の円を描画
    cv::circle(image, cv::Point(100,400), 50, cv::Scalar(0,255,0), 5, cv::LINE_4);
    //(400,400)に半径30,塗りつぶした円を描画
    cv::circle(image, cv::Point(400,400), 30, cv::Scalar(255,0,0), -1);
   
    //画像の表示
    cv::imshow("showing",image);
    cv::waitKey(0);
    
    return 0;
}

実行結果

円の描画


四角形(正方形・長方形)の描画

四角形の描画について解説します。四角形の描画で使用する関数はcv::rectangleという関数です。cv::rectangleの引数は以下の通りです。

cv::rectangle(画像の変数, cv::Point(左上の点のx座標,左上の点のy座標), cv::Point(右下の点のx座標,右下の点のy座標), cv::Scalar(,,), 線の太さ(-1の時は塗りつぶし));

サンプルコード

こちらが四角形(正方形・長方形)を描画するためのサンプルコードです。それぞれコメントにて説明してあります。

タイトル:rectangle.cpp

#include <opencv2/opencv.hpp>
#include <iostream>

int main(void)
{   
    //空(黒色)の画像生成(500ピクセルの正方形の画像)
    cv::Mat image = cv::Mat::zeros(cv::Size(500,500), CV_8UC3);

    //cv::rectangle(画像の変数, cv::Point(左上の点のx座標,左上の点のy座標), cv::Point(右下の点のx座標,右下の点のy座標), cv::Scalar(青,緑,赤), 線の太さ(-1の時は塗りつぶし));
    //左上(300,300),右下(500,400)に線の太さ5の四角形を描画
    cv::rectangle(image, cv::Point(300,300), cv::Point(500,400), cv::Scalar(0,0,255), 5);
    //左上(100,100),右下(200,200)に,塗りつぶした四角形(正方形)を描画
    cv::rectangle(image, cv::Point(100,100), cv::Point(200,200), cv::Scalar(255,0,0), cv::FILLED);
   
    //画像の表示
    cv::imshow("showing",image);
    cv::waitKey(0);
    
    return 0;
}

実行結果

四角形(正方形・長方形)の描画

この記事のまとめ

本記事ではC++とOpenCVを用いて線・円・四角形(長方形・正方形)を描画する方法を解説しました。

Code Databaseでは、C++とOpenCVについての解説をアップしていますので、みてください!