#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int
main(int argc, char *argv[])
{
cv::Mat img = cv::Mat::zeros(500, 500, CV_8UC3);
// Red,太さ3,4近傍連結
cv::line(img, cv::Point(100, 100), cv::Point(400, 105), cv::Scalar(0,0,200), 3, 4);
// Green,太さ5,8近傍連結
cv::line(img, cv::Point(100, 200), cv::Point(400, 205), cv::Scalar(0,200,0), 5, 8);
// Blue,太さ10,アンチエイリアス
cv::line(img, cv::Point(100, 300), cv::Point(400, 305), cv::Scalar(200,0,0), 10, CV_AA);
cv::namedWindow("drawing", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::imshow("drawing", img);
cv::waitKey(0);
}
実行結果:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int
main(int argc, char *argv[])
{
cv::Mat img = cv::Mat::zeros(500, 500, CV_8UC3);
// Red,太さ3,4近傍連結
cv::rectangle(img, cv::Point(200,50), cv::Point(300, 150), cv::Scalar(0,0,200), 3, 4);
// Green,太さ5,8近傍連結
cv::rectangle(img, cv::Point(200,200), cv::Point(300, 300), cv::Scalar(0,200,0), 5, 8);
// Blue,塗りつぶし,アンチエイリアス
cv::rectangle(img, cv::Point(200,350), cv::Point(300, 450), cv::Scalar(200,0,0), -1, CV_AA);
cv::namedWindow("drawing", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::imshow("drawing", img);
cv::waitKey(0);
}
実行結果:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int
main(int argc, char *argv[])
{
cv::Mat img = cv::Mat::zeros(500, 500, CV_8UC3);
// Red
// 画像,円の中心座標,半径,色,線太さ,種類
cv::circle(img, cv::Point(300, 100), 100, cv::Scalar(0,0,200), 3, 4);
// Green
cv::circle(img, cv::Point(200, 250), 120, cv::Scalar(0,200,0), 8, 8);
// Blue
cv::circle(img, cv::Point(300, 400), 80, cv::Scalar(200,0,0), -1, CV_AA);
cv::namedWindow("drawing", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::imshow("drawing", img);
cv::waitKey(0);
}
実行結果:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int
main(int argc, char *argv[])
{
cv::Mat img = cv::Mat::zeros(500, 500, CV_8UC3);
double angle;
angle = 30;
/// 画像,中心座標,(長径・短径),回転角度,円弧開始角度,円弧終了角度,色,線太さ,連結
// Red,太さ3,4近傍連結
cv::ellipse(img, cv::Point(400, 150), cv::Size(200, 100), angle, angle-100, angle+200, cv::Scalar(0,0,200), 3, 4);
angle = 0;
// Green,太さ5,8近傍連結
cv::ellipse(img, cv::Point(200, 200), cv::Size(100, 100), angle, angle, angle+360, cv::Scalar(0,200,0), 5, 8);
angle = 100;
// Blue,塗りつぶし,アンチエイリアス
cv::ellipse(img, cv::Point(200, 400), cv::Size(100, 200), angle, angle-200, angle+100, cv::Scalar(200,0,0), -1, CV_AA);
cv::namedWindow("drawing", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::imshow("drawing", img);
cv::waitKey(0);
}
実行結果:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int
main(int argc, char *argv[])
{
cv::Size img_size(500, 500);
cv::Mat img = cv::Mat::zeros(img_size, CV_8UC3);
cv::RNG gen(0xffffffff);
int npt[] = {4, 4};
cv::Point pt1[2][4];
const cv::Point *ppt[2] = {pt1[0], pt1[1]};
// Red
for(int i=0; i<2; i++)
for(int j=0; j<4; j++)
pt1[i][j] = cv::Point(gen.uniform(0, img_size.width), gen.uniform(0, img_size.height));
// 画像,折れ線頂点の配列の配列,頂点数の配列,折れ線数,線が閉じているか?,色,線太さ,種類
cv::polylines(img, ppt, npt, 2, true, cv::Scalar(0,0,200), 3, 4);
// Green
for(int i=0; i<2; i++)
for(int j=0; j<4; j++)
pt1[i][j] = cv::Point(gen.uniform(0, img_size.width), gen.uniform(0, img_size.height));
cv::polylines(img, ppt, npt, 2, true, cv::Scalar(0,200,0), 3, 8);
// Blue
for(int i=0; i<2; i++)
for(int j=0; j<4; j++)
pt1[i][j] = cv::Point(gen.uniform(0, img_size.width), gen.uniform(0, img_size.height));
cv::polylines(img, ppt, npt, 2, false, cv::Scalar(200,0,0), 10, CV_AA);
cv::namedWindow("drawing", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::imshow("drawing", img);
cv::waitKey(0);
}
実行結果:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int
main(int argc, char *argv[])
{
cv::Size img_size(500, 500);
cv::Mat img = cv::Mat::zeros(img_size, CV_8UC3);
cv::RNG gen(0xffffffff);
int npt[] = {4, 4};
cv::Point pt1[2][4];
const cv::Point *ppt[2] = {pt1[0], pt1[1]};
// Red
for(int i=0; i<2; i++)
for(int j=0; j<4; j++)
pt1[i][j] = cv::Point(gen.uniform(0, img_size.width), gen.uniform(0, img_size.height));
// 画像,折れ線頂点の配列の配列,頂点数の配列,折れ線数,色,種類
cv::fillPoly(img, ppt, npt, 2, cv::Scalar(0,0,200), 4);
// Green
for(int i=0; i<2; i++)
for(int j=0; j<4; j++)
pt1[i][j] = cv::Point(gen.uniform(0, img_size.width), gen.uniform(0, img_size.height));
cv::fillPoly(img, ppt, npt, 2, cv::Scalar(0,200,0), 8);
// Blue,
for(int i=0; i<2; i++)
for(int j=0; j<4; j++)
pt1[i][j] = cv::Point(gen.uniform(0, img_size.width), gen.uniform(0, img_size.height));
cv::fillPoly(img, ppt, npt, 2, cv::Scalar(200,0,0), CV_AA);
cv::namedWindow("drawing", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::imshow("drawing", img);
cv::waitKey(0);
}
実行結果:
現在のところ(OpenCV-2.2),下記以外のフォントはサポートされていないので,日本語などのマルチバイト文字などを描画することはできません.
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int
main(int argc, char *argv[])
{
cv::Mat img = cv::Mat::zeros(500, 500, CV_8UC3);
int face[] = {cv::FONT_HERSHEY_SIMPLEX, cv::FONT_HERSHEY_PLAIN, cv::FONT_HERSHEY_DUPLEX, cv::FONT_HERSHEY_COMPLEX,
cv::FONT_HERSHEY_TRIPLEX, cv::FONT_HERSHEY_COMPLEX_SMALL, cv::FONT_HERSHEY_SCRIPT_SIMPLEX,
cv::FONT_HERSHEY_SCRIPT_COMPLEX, cv::FONT_ITALIC};
// 画像,テキスト,位置(左下),フォント,スケール,色,線太さ,種類
cv::putText(img, "OpenCV", cv::Point(50,50), face[0], 1.2, cv::Scalar(0,0,200), 2, CV_AA);
cv::putText(img, "OpenCV", cv::Point(50,100), face[1], 1.2, cv::Scalar(0,200,0), 2, CV_AA);
cv::putText(img, "OpenCV", cv::Point(50,150), face[2], 1.2, cv::Scalar(200,0,0), 2, CV_AA);
cv::putText(img, "OpenCV", cv::Point(50,200), face[3], 1.2, cv::Scalar(0,100,100), 2, CV_AA);
cv::putText(img, "OpenCV", cv::Point(50,250), face[4], 1.2, cv::Scalar(100,100,0), 2, CV_AA);
cv::putText(img, "OpenCV", cv::Point(50,300), face[5], 1.2, cv::Scalar(100,0,100), 2, CV_AA);
cv::putText(img, "OpenCV", cv::Point(50,350), face[6], 1.2, cv::Scalar(100,100,100), 2, CV_AA);
cv::putText(img, "OpenCV", cv::Point(50,400), face[7], 1.2, cv::Scalar(100,100,200), 2, CV_AA);
cv::putText(img, "OpenCV", cv::Point(300,50), face[0]|face[8], 1.2, cv::Scalar(100,200,100), 2, CV_AA);
cv::putText(img, "OpenCV", cv::Point(300,100), face[1]|face[8], 1.2, cv::Scalar(200,100,100), 2, CV_AA);
cv::putText(img, "OpenCV", cv::Point(300,150), face[2]|face[8], 1.2, cv::Scalar(200,200,100), 2, CV_AA);
cv::putText(img, "OpenCV", cv::Point(300,200), face[3]|face[8], 1.2, cv::Scalar(200,100,200), 2, CV_AA);
cv::putText(img, "OpenCV", cv::Point(300,250), face[4]|face[8], 1.2, cv::Scalar(100,200,200), 2, CV_AA);
cv::putText(img, "OpenCV", cv::Point(300,300), face[5]|face[8], 1.2, cv::Scalar(100,200,255), 2, CV_AA);
cv::putText(img, "OpenCV", cv::Point(300,350), face[6]|face[8], 1.2, cv::Scalar(100,255,200), 2, CV_AA);
cv::putText(img, "OpenCV", cv::Point(300,400), face[7]|face[8], 1.2, cv::Scalar(255,200,100), 2, CV_AA);
cv::namedWindow("drawing", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::imshow("drawing", img);
cv::waitKey(0);
}
実行結果: