10-Day-Of-OpenCV

第一次学习OpenCV,在这里将学习如何利用OpenCV中常用的函数绘制不同几何图形。

1. 绘图函数

计算机视觉中的绘图功能主要为捕获的对象提供规则的轮廓。
常用的绘图函数有cv2.line()cv2.circle()cv2.rectangle()cv2.ellipse()cv2.putText()
以上所有绘图功能都需要设置以下参数:
• img:将要绘制图形的图像。
• color:颜色。以 RGB 为例,需要传入一个元组,例如:(255,0,0)代表蓝色。对于灰度图只需要传入灰度值。
• thickness:线条的粗细。如果给一个闭合图形设置为 -1,那么这个图形就会被填充。默认值是 1。
• linetype:线条的类型,8 连接,抗锯齿等。默认情况是 8 连接。cv2.LINE_AA 为抗锯齿,这样看起来会非常平滑。

1.1 画线

要绘制一条线,您只需要指定线的起点和终点。

# 画一条从左上方到右下角的蓝色线段
import numpy as np
import cv2
# 创建一个黑色的图像
img=np.zeros((512,512,3), np.uint8)
# 绘制一条蓝色对角线,厚度为5像素
8 cv2.line(img,(0,0),(511,511),(255,0,0),5)

cv2.polylines()可以用来画多条线。只需将要绘制的线条放入列表中,然后将此列表传递给函数。每条线都是独立绘制的。这将比用cv2.line()逐行绘制要快。

1.2 画矩形

要绘制一个矩形,只需指定矩形左上顶点和右下顶点的坐标即可。

# 在图像的右上角画一个绿色的矩形。
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)

1.3 画圆

画圆只需要指定圆心的坐标和圆的半径即可。

# 在上面的矩形中画一个圆。
cv2.circle(img,(447,63), 63, (0,0,255), -1)

1.4 画椭圆

画椭圆,我们则需要提供几个参数。一个参数是中心点的位置坐标。下一个参数是长轴和短轴的长度。椭圆沿逆时针方向旋转的角度。椭圆弧沿顺时针方向起始的角度和结束角度,如果是 0 和 360,就是整个椭圆。

# 在图片的中心绘制半个椭圆。
cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)

1.5 画多边形

画多边形,需要指定每个顶点的坐标。用这些坐标构建一个大小等于行数 X1X2 的数组,行数就是点的数目。这个数组的数据类型必须为 int32。

pts=np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts=pts.reshape((-1,1,2))
# 这里 reshape 的第一个参数为-1, 表明这一维的长度是根据后面的维度的计算出来的。
# 如果第三个参数是 False,我们得到的多边形是不闭合的(首尾不相连)。

1.6 在图片上添加文字

要在图像上绘制文本,您需要设置以下参数:文本、位置、字体类型、字体大小、文本的一般属性,例如颜色、粗细、线型等。

# 在图像上绘制白色的 OpenCV。
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2)

1.7 结果显示

# 显示最终结果
winname = 'example'
cv2.namedWindow(winname)
cv2.imshow(winname, img)
cv2.waitKey(0)
cv2.destroyWindow(winname)

注意:所有的绘图函数的返回值都是None,所以不能使用

img =
cv2.line(img,(0,0),(511,511),(255,0,0),5)。

2. 把鼠标当画笔

使用 OpenCV 处理鼠标事件,使用的函数是:cv2.setMouseCallback()

创建鼠标事件回调函数,当鼠标事件发生时执行。鼠标事件可以是鼠标上的任意动作,如左键按下、左键释放、左键双击等。我们可以通过鼠标事件获取鼠标对应的图片上的坐标。有了这些信息,我们可以做任何我们想做的事情。
所有支持的鼠标事件都可以通过以下代码查看。

# -*- coding: utf-8 -*-
import cv2
events=[i for i in dir(cv2) if 'EVENT'in i]
print events

所有的鼠标事件回调函数都有统一的格式,唯一的区别就是调用后的函数。

创建一个简单的程序,在您双击的图片上画一个圆圈。

# -*- coding: utf-8 -*-
import cv2
import numpy as np
# 鼠标回调函数
def draw_circle(event,x,y,flags,param):
	if event==cv2.EVENT_LBUTTONDBLCLK:
		cv2.circle(img,(x,y),100,(255,0,0),-1)
# 创建图像与窗口并将窗口与回调函数绑定
img=np.zeros((512,512,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
while(1):
	cv2.imshow('image',img)
	if cv2.waitKey(20)&0xFF==27:
		break
cv2.destroyAllWindows()

3. 用滑动条做调色板

学会把滑动条绑定到 OpenCV 的窗口,所需要使用到的函数:cv2.getTrackbarPos()cv2.creatTrackbar()等。

cv2.getTrackbarPos()函数的第一个参数是滑块的名称,第二个参数是放置滑块的窗口的名称,第三个参数是滑块的默认位置。第四个参数是滑块的最大值,第五个函数是回调函数,每次滑块滑动都会调用。

创建一个简单的程序:通过调节滑动条来设定画板颜色。我们要创建一个窗口来显示显色,还有三个滑动条来设置 B,G,R 的颜色。当我们滑动滚动条是窗口的颜色也会发生相应改变。默认情况下窗口的起始颜色为黑。回调函数通常都会含有一个默认参数,就是滑动条的位置。滑动条的另外一个重要应用就是用作转换按钮。默认情况下 OpenCV 本身不带有按钮函数。所以我们使用滑动条来代替。在我们的程序中,我们要创建一个转换按钮,只有当装换按钮指向 ON 时,滑动条的滑动才有用,否则窗户口都是黑的。

# -*- coding: utf-8 -*-

import cv2
import numpy as np

def nothing(x):
	pass
# 创建一副黑色图像
img=np.zeros((300,512,3),np.uint8)
cv2.namedWindow('image')
cv2.createTrackbar('R','image',0,255,nothing)
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('B','image',0,255,nothing)
switch='0:OFF\n1:ON'
cv2.createTrackbar(switch,'image',0,1,nothing)
while(1):
	cv2.imshow('image',img)
	k=cv2.waitKey(1)&0xFF
	if k==27:
		break
	r=cv2.getTrackbarPos('R','image')
	g=cv2.getTrackbarPos('G','image')
	b=cv2.getTrackbarPos('B','image')
	s=cv2.getTrackbarPos(switch,'image')
	if s==0:
		img[:]=0
	else:
		img[:]=[b,g,r]
cv2.destroyAllWindows()

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2022年4月9日 下午1:13
下一篇 2022年4月9日 下午1:22

相关推荐