栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

如何使用OpenCV绘制简单的几何图形?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用OpenCV绘制简单的几何图形?

要使用OpenCV绘制图形,除了cv2库之外,我们还需要便于进行矩阵操作的numpy库:

import cv2 as cv
import numpy as np
空白窗口

先展示代码:

blank = np.zeros((300,500,3), dtype='unit8')

cv.imshow('Blank', blank)

代码解释:首先用numpy生成一个元素的值全为零的多维数组,dtype表示数组里的元素的类型,这是RGB图片所使用的类型(具体是什么含义这里不详细说明);(300,500,3)中的前两个表示这是一个高为300、宽为500的图片,最后的3表示这是一个三通道(channel)的图片(即r,g,b三个通道)。

当我们用cv.imshow()将这个图片展示出来,就会得到一个黑的图片,什么也没有(因为数组元素全为零)。

改变图片的子区域的颜色

我们可以给一个图片的子区域(subarea)上色(当然这工艺很粗糙)。我们以上述的空白图片为例:

blank[150:200, 300:400] = 0,0,255
cv.imshow('Red',blank)

代码解释:这其实就是numpy中的数组/矩阵的赋值,把blank的某一部分区域,即高从150到200、宽从300到400的区域,赋相应的值,即0(blue channel),0(green channel),255(red channel),结果就是红色。注意OpenCV比较“奇怪”,颜色通道的顺序不是RGB而是BGR。

绘制矩形
cv.rectangle(blank, (0, 0), (blank.shape[1] // 2, blank.shape[0] // 2), 
			(0, 255, 0), thickness=-1)
cv.imshow('Rectangle', blank)

代码解释:我们直接利用OpenCV中的函数rectangle即可。函数的参数很多,大家在写代码时IDE弹出的自动补全应该也能看到:

第一个参数在什么图片上绘制,这里用的是上文中的blank;紧接着的两个参数是矩形的左上顶点和右下顶点的坐标(因为这两个点就能确定矩形的位置);第四个参数是矩形边框的颜色;第五个参数是矩形的边框的粗细,如果是负数,那么表示将矩形填充,即本例所示。还有其他一些参数,本例没有用到,大家可以去查官方文档。

大家可能比较困惑的是为什么第三个参数中先是blank.shape[1] // 2,后是blank.shape[0] // 2。这是因为OpenCV中,坐标系中的x轴是水平的,y轴是垂直的,并且图片的shape是“先高后宽”。

绘制圆
cv.circle(blank, (blank.shape[1] // 2, blank.shape[0] // 2), 
			40, (0, 0, 255), thickness=-3)
cv.imshow('Circle', blank)

代码解释:与绘制矩形类似,我们直接用OpenCV中的函数circle,各参数分别为:

所绘制圆形的对象,即blank圆心的坐标位置,这里选择在整个图片的中心圆的半径大小(圆的圆心和半径就能确定一个圆)圆的轮廓线的颜色,这里是红色圆的轮廓线的粗细,如果是负数,那么表示将圆形填充,即本例所示。其他参数,本例未显示。 绘制直线

cv.line(blank, (100, 250), (300, 200), (255, 255, 255), thickness=3)
cv.imshow('Line', blank)

代码解释:类似的,这里使用line函数,参数分别为:

第一个参数:要绘制直线的图片对象,即blank第二、三个参数:直线的两个端点的坐标(注意OpenCV中图片的x、y轴的方向)第四个参数:直线的颜色,这里是白色第五个参数:直线的粗细其他参数没有使用,是默认值

注意:在上述代码之后最好加上cv.waitKey(0),防止图片一闪而过。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744014.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号