OpenCV-Python教程:绘制直线、圆形、方形(line,circle,rectangle)

OpenCV-Python教程:绘制直线、圆形、方形(line,circle,rectangle),第1张

概述原文链接:http://www.juzicode.com/archives/5323返回Opencv-Python教程因为绘图 *** 作需要用到起点、终点坐标等参数,绘图前需要先了解在OpenCV中图像像素位置的坐标表示方法。一般我们用的直角坐标系x轴向右增长,y轴向上增长,但是在OpenCV图像中,y却是向下增长的,也就说一张图片左上

原文链接:http://www.juzicode.com/archives/5323

返回Opencv-Python教程

因为绘图 *** 作需要用到起点、终点坐标等参数,绘图前需要先了解在OpenCV中图像像素位置的坐标表示方法。一般我们用的直角坐标系x轴向右增长,y轴向上增长,但是在OpenCV图像中,y却是向下增长的,也就说一张图片左上角顶点的坐标为(0,0),这样的处理也符合人类从左到右、从上到下的阅读习惯。

另外有点和常识不同的地方是我们常说“R-G-B”三原色,一个像素可以用R、G、B三种像素组合成各种不同的颜色,但是在OpenCV彩色图像中一个像素却是按照“B-G-R”模式组织的。

绘图 *** 作函数的一些公共参数:

img:图像对象。color:颜色,如果是彩色用一个三元组表示,三元组的元素按照B-G-R组织,三元组(0,255,0)中B,R为0,G为255,所以表示的是纯绿色。如果是灰度,则用单个数值表示thickness:线条宽度。point:点位置,用一个二元组表示,二元组元素按照x-y组织,比如(10,20)表示的是从左到右x=10,从上到下y=20的位置。lineType : 线条类型,在绘制曲线时通常使用CV2.liNE_AA可以有更好的平滑效果。

 

1、直线

 在一个坐标系中知道两个点,两点之间的连线就构成了一条直线,所以画直线需要起点和终点的x-y坐标。

绘图方法用cv2.line(),

第1个位置参数为要绘图的图像实例。第2个参数为起点,二元组。第3个参数为终点,二元组。第4个参数为颜色。第5个参数为线宽。

先用numpy构建一个512×512大小的纯白色图片对象:img = np.ones((512,512,3)),起点选在start=(50,50),终点选择stop=(300,300),颜色设置为红色color=(0,0,255),线宽thick=5:

import cv2import numpy as npprint('VX公众号: 桔子code / juzicode.com')print('cv2.__version__:',cv2.__version__)img = np.ones((512,512,3))start=(50,50)stop=(300,300)color=(0,0,255)thick=5cv2.line(img,start,stop,color,thick)cv2.imshow('img',img)cv2.waitKey()

运行结果:

 如果使用灰度图,img构建成单通道图像,color虽然可以用三元组表示,但是实际只用到了第0个元素。在白色背景下,用0值表示黑色,黑色背景下大于0的值表示白色:

import cv2import numpy as npprint('VX公众号: 桔子code / juzicode.com')print('cv2.__version__:',cv2.__version__)img = np.ones((512,512)) #白色背景start=(50,50)stop=(300,300)color=(0,255,255) #白色背景下显示黑色线条,虽然可以用三元组表示颜色,实际只取第0个元素thick=5cv2.line(img,start,stop,color,thick)cv2.imshow('img-white',img)img = np.zeros((512,512)) #黑色背景start=(50,50)stop=(300,300)color=1 #黑色背景下显示白色线条,大于0即可thick=5cv2.line(img,start,stop,color,thick)cv2.imshow('img-black',img)cv2.waitKey()

运行结果:

 

 

2、圆形

 使用cv2.circle()画圆

第1参数是图像对象;第2个参数为圆心;第3个参数为半径;第4个参数为颜色;第5个参数为线条宽度,如果使用-1会自动填充圆形的内部;

下面这个例子中在圆心(100,100)处画一个黄色外框半径为50的空心圆,在圆心(200,200)处画一个半径为50的实心圆。

import cv2import numpy as npprint('VX公众号: 桔子code / juzicode.com')print('cv2.__version__:',cv2.__version__)img = np.ones((512,512,3)) #白色背景center=(100,100)radius=50color=(0,255,255)  #黄色cv2.circle(img,center, radius, color, 5) #线条center=(200,200)cv2.circle(img,center, radius, color, -1) #填充cv2.imshow('img',img) cv2.waitKey()

运行结果:

 

 

3、方形

 cv2.rectangle()用来画方形,包括长方形和正方形。

第1个参数为图像对象;第2个参数为方形左上角坐标;第3个参数为方形右下角坐标,方形的宽高自动根据起始点坐标计算;第4个参数为颜色;第5个参数为线条宽度,如果使用-1会自动填充圆形的内部;

下面的例子画出2个方形:

import cv2import numpy as npprint('VX公众号: 桔子code / juzicode.com')print('cv2.__version__:',cv2.__version__)img = np.ones((512,512,3)) #白色背景topleft=(10,100)downright=(111,333)color=(255,0,0)  #蓝色cv2.rectangle(img,topleft, downright, color, 2) #线条topleft=(300,100)downright=(500,300)color=(0,255,0)  #蓝色cv2.rectangle(img,topleft, downright, color, -1) #填充cv2.imshow('juzicode',img) cv2.waitKey()

运行结果:

 

小结:本文介绍了如何在OpenCV图像中绘制直线、圆形、方形,用的比较多的是绘制方形,比如人脸识别时将人脸部分用方框标注出来。

 

扩展阅读:OpenCV-Python教程OpenCV-Python教程:OpenCV-Python教程:绘制多边形、输出文字 总结

以上是内存溢出为你收集整理的OpenCV-Python教程:绘制直线、圆形、方形(line,circle,rectangle)全部内容,希望文章能够帮你解决OpenCV-Python教程:绘制直线、圆形、方形(line,circle,rectangle)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1185461.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存