python opencv单通道转多通道_13、OpenCV绘图和文本显示

我们经常想要绘制各种形状,为此,OpenCV提供了一系列功能,可以绘制直线,矩形,圆等。OpenCV的绘图功能适用于图像,但其中大多数仅影响前三个通道,在单通道图像的情况下仅默认第一个通道。大多数绘图支持颜色,厚度,线条类型的修改。

当指定颜色时,使用Scalar对象,大部分只使用前三个值。有时可以使用Scalar中的第四个值来表示alpha通道,但绘图函数目前不支持alpha混合。另外, OpenCV使用BGR转换多通道图像以进行颜色渲染。

绘制功能的厚度和线型参数两者都是整数,但后者唯一可接受的值是4,8或 LINE_AA等。 厚度是以像素为单位粗细。对于圆形,矩形和所有其他闭合形状,厚度参数也可以设置为FILLED。在这种情况下,结果是绘制的图形将以与边缘相同的颜色填充。lineType参数指示行应该是"4连接","8连接"还是消除锯齿。

对于绘图算法,通常将端点(线),中心点(圆),角(矩形)等指定为整数。这些与像素对齐。 在有可用移位的情况下,它为整数参数中的位数,将其视为小数位。 例如,如果想要一个以(5,5)为中心的圆,半径设置为1,那么这个圆将被画成(2.5,2.5)。 这种效果通常会非常微妙,并取决于所使用的线型。 对于消除锯齿的线条效果最明显。表1是绘制函数

python opencv单通道转多通道_13、OpenCV绘图和文本显示_第1张图片

circle()的第一个参数就是图像。 接下来是中心,二维点和半径。 其余参数是标准颜色,厚度,线型和移位。

clipLine()此函数用于确定由两个点pt1和pt2指定的线是否位于矩形边界内。

ellipse()函数与circle()函数非常相似,主要区别在于Size类型的axes参数。高度和宽度参数表示椭圆的长轴和短轴的长度。角度是从水平逆时针测量的长轴的角度,startAngle和endAngle指示开始和结束的角度。 因此,对于完整的椭圆,必须分别将这些值设置为0和360。

指定椭圆的替代方法是使用边界框。 在这种情况下, RotatedRect的参数框完全指定了椭圆的大小和方向。。

ellipse2Poly()函数由ellipse()在内部计算椭圆弧,但也可以自己调用它。 给定有关椭圆弧(ellipse()中定义的椭圆弧参数(中心,轴,角度,startAngle和endAngle-all)和指定要采样的点之间角度的参数信息, ellipse2Poly ()计算一系列点,形成了指定的椭圆弧的多边形逼近。 计算的点将返回到矢量<> pts中。

fillConvexPoly()函数如果传递给它的多边形具有自相交,则会出错它将无法正常工作.2 pts中的点被视为顺序,并且pts中的最后一点 第一点是隐含的(即,多边形被假定为关闭)。

fillPoly绘制任意数量的填充多边形。fillConvexPoly()不同,它可以处理具有自相交的多边形。

函数line()在图像中绘制一条从pt1到pt2的直线。 线条会被图像边界自动裁剪

rectangle()函数在图像中绘制一个从pt1到pt2的矩形。

polyLines函数绘制任意数量的未填充多边形。 它可以处理一般多边形,包括具有自交叉的多边形。

python opencv单通道转多通道_13、OpenCV绘图和文本显示_第2张图片

putText函数是OpenCV的文本绘制函数; 它只是将一些文本投射到图像上。 除非bottomLeftOrigin标志为true,否则文本将在文本框的左上角以指示的颜色打印,在这种情况下,文本框的左下角位于原点。 使用的字体由fontFace参数选择,该参数可以是表3中列出的任何一种。

python opencv单通道转多通道_13、OpenCV绘图和文本显示_第3张图片

每种字体都有一个大小。 当fontScale不是1.0时,在绘制文本之前,字体大小由该数字缩放。 图1显示了每种字体的示例。

python opencv单通道转多通道_13、OpenCV绘图和文本显示_第4张图片
#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include "iostream"using namespace cv;using namespace std;int main(int argc, char** argv){Mat src = imread("E:/绘制.jpg", 1);namedWindow("原图", 0);imshow("原图", src);circle(src, Point2d(100, 100), 100, Scalar(255, 0, 0), 3, 4, 0);ellipse(src, Point2d(350, 100), Size(100, 50), 0, 0, 360, Scalar(0, 255, 0), 3, 8, 0);line(src, Point2d(500, 50), Point2d(600, 100), Scalar(0, 0, 255), 3, 4, 0);rectangle(src, Rect(100, 300, 100, 80), Scalar(255, 255, 0), 3, 4, 0);Point p[2][3] = { { Point(300, 400), Point(400, 380), Point(450, 260) },{ Point(420, 540), Point(540, 300), Point(570,530) } };const Point *pp[] = { p[0], p[1] };int n[] = { 4, 4 };polylines(src, pp,n,1,true, Scalar(0, 255, 255), 3, 8, 0);fillPoly(src, pp, n, 1, Scalar(255, 255, 0),4,0);bool isOk = clipLine(Rect(50, 50, 200, 200), p[0][0], p[0][1]);vector pts;ellipse2Poly(Point(350, 250), Size(200, 150), 30, 0, 200, 4, pts);Point Points[5] = { { 520,550 },{ 578,550 },{ 540,440 },{ 532,432 },{ 500,530 } };fillConvexPoly(src, Points, 5, Scalar(255, 0, 255));putText(src, "OpenCV Draw Graphics And Text",Point(100,100), FONT_HERSHEY_PLAIN, 1.0, Scalar(255, 255, 0));namedWindow("OpenCV绘制图形和文本演示", 0);imshow("OpenCV绘制图形和文本演示", src);waitKey(0);return 0;}
python opencv单通道转多通道_13、OpenCV绘图和文本显示_第5张图片

你可能感兴趣的:(python,opencv单通道转多通道)