本文共 2467 字,大约阅读时间需要 8 分钟。
画直线或者其他图形(虚线,圆,矩形等)的函数都接受宽度(thickenss)和线性(lineType)的参数,这两个都是整型的,但第二个参数的值只能是4,8或者cv::LINE__AA。thickness参数是指线宽的像素数,对于圆,矩形,和其他封闭图形,thickenss可以设置为cv::FULLD,这个图形就会被用和边界一样的颜色填充满。
lineType参数表示直线是“四邻域连接”还是“八邻域连接”或者是平滑处理。circle( cv::Mat& img, //输入图像 cv::Point center, //输入圆心 int radius, //半径 const cv::Scalar& color, //线条颜色 int thickness = 1, //线宽 int lineType = 8, //线型 int shift = 0 //圆心坐标点和半径值的小数位数 );
下面代码在一幅我们定义的图片上绘制了一个圆;
#include "pch.h"#include#include using namespace std;using namespace cv;#define WINDOW_NAME "绘图"#define WINDOW_WIDTH 300 //定义图像大小的宏int main(){ Mat img = Mat::zeros(WINDOW_WIDTH, WINDOW_WIDTH,CV_8UC3); Point2i pt(100,100); circle(img,pt , 50, Scalar(255, 0, 0)); imshow("WINDOW_NAME", img); waitKey(); return 0;}
该函数在图像img上绘制一条从pt1到pt2的直线,直线自动被图像边缘截断;
line( cv::Mat img, //输入图像 cv::Point pt1, //起点 cv::Point pt2, //终点 const cv::Scalar& color, //颜色 int lineType = 8, //线型 int shift = 0 //起点终点的小数位数 );
该函数有两种使用方法,一种传入矩形的两个相对的角点坐标,另一种是传入一个矩形Rect类;
rectangle( cv::Mat img, cv::Point pt1, cv::Point pt2, const cv::Scalar& color, int lineType = 8, int shift = 0 ); rectangle( cv::Mat img, cv::Rect r, const cv::Scalar& color, int lineType = 8, int shift = 0 );
下面我们在之前画圆的函数里再加点东西:
Point2i pt1(50, 50); //矩形角点1 Point2i pt2(100, 100); //矩形角点2 Rect r(10, 10, 70, 70); //定义一个矩形 rectangle(img, pt1, pt2, Scalar(0, 0, 255)); rectangle(img, r, Scalar(0, 255, 0));
我们很自然的有另外一种需求,我们可以在图片上绘制矩形,那我们也想可以给图片加一些类似字幕的文字。这就是cv::putText()函数
putText(img, "zhouxuan", pt1, FONT_HERSHEY_SIMPLEX,1.0,Scalar(255,255,0)); // 输入图像 左下标 字形 大小 颜色 字形标识符:FONT_HERSHEY_COMPLEX_SMALL; //小号版本的FONT_HERSHEY_COMPLEXFONT_HERSHEY_SIMPLEX; //手写体FONT_HERSHEY_DUPLEX; //普通大小无衬线字体,比 FONT_HERSHEY_SCRIPT_SIMPLEX 更复杂FONT_HERSHEY_COMPLEX; //普通大小无衬线字体,比FONT_HERSHEY_DUPLEX 更复杂FONT_HERSHEY_TRIPLEX; //普通大小无衬线字体,比FONT_HERSHEY_SCRIPT_COMPLEX 更复杂FONT_HERSHEY_SCRIPT_COMPLEX; //比FONT_HERSHEY_SCRIPT_SIMPLEX更复杂的变体FONT_HERSHEY_PLAIN; //小号无衬线字体FONT_HERSHEY_SCRIPT_SIMPLEX; //普通大小无衬线字体
转载地址:http://edewi.baihongyu.com/