• 用 OpenCV 画不同的几何图形

主要函数:cv.line(), **cv.circle() , cv.rectangle()cv.ellipse()cv.putText() 

 

Code

1 上面的这些函数,我们能看到一些相同的参数:
2 
3 img:要画的图片
4 
5 color:形状的颜色,如 BGR,它是一个元组,例如:蓝色(255,0,0)。对于灰度图,只需传一个标量值。
6 
7 thickness: 线或圆等的厚度。如果传 -1 就是像圆的闭合图形,它将填充形状。_ 默认 thickness = 1_
8 
9 lineType:线条类型,如 8 连接,抗锯齿线等。默认情况下,它是 8 连接。**cv.LINE_AA** 画出抗锯齿线,非常好看的曲线。

 

画线

1 import numpy as np
2 import cv2 as cv
3 
4 # 创建一个黑色的图像
5 img = np.zeros((512, 512, 3), np.uint8)
6 # 画一条 5px 宽的蓝色对角线
7 cv.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
8 cv.imshow('image', img)
9 cv.waitKey(0)

 

 

画矩形、画圆、画椭圆、画多边形、

 1 import numpy as np
 2 import cv2 as cv
 3 
 4 # 创建一个黑色的图像
 5 img = np.zeros((512, 512, 3), np.uint8)
 6 # 在图像上画一个绿色的矩形
 7 cv.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)
 8 # 画圆
 9 cv.circle(img,(447,63), 63, (0,0,255), -1)
10 # 画椭圆
11 cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
12 # 画多边形
13 pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
14 pts = pts.reshape((-1,1,2))
15 cv.polylines(img,[pts],True,(0,255,255))
16 
17 cv.imshow('image', img)
18 cv.waitKey(0)

 

 

 

鼠标作为画笔

cv.setMouseCallback()

创建鼠标回调函数是有特定的格式,在任何地方都一样。它仅仅是函数的功能不同。因此我们的鼠标回调函数是做一件事,就是我们双击的地方画圆

 1 import numpy as np
 2 import cv2 as cv
 3 
 4 
 5 # 鼠标回调函数
 6 def draw_circle(event, x, y, flags, param):
 7     if event == cv.EVENT_LBUTTONDBLCLK:
 8         cv.circle(img, (x, y), 100, (255, 0, 0), -1)
 9 
10 
11 # 创建一个黑色图像,一个窗口,然后和回调绑定
12 img = np.zeros((512, 512, 3), np.uint8)
13 cv.namedWindow('image')
14 cv.setMouseCallback('image', draw_circle)
15 while (1):
16     cv.imshow('image', img)
17     if cv.waitKey(20) & 0xFF == 27:
18         break
19 cv.destroyAllWindows()

 

作为调色板的跟踪栏

函数:cv.getTrackbarPos(), **cv.createTrackbar()

这里,我们将创建用以显示指定颜色的简单程序。 你有一个显示颜色的窗口和三个轨迹栏,用来指定 B,G,R 颜色。你可以滑动轨迹栏改变窗口的颜色。默认情况下,初始颜色为黑色。

对于 cv.createTrackbar() 函数,第一个参数是轨迹栏名字,第二个参数是被附上的窗口名字,第三个参数是默认值,第四个是最大值,第五个是回调函数——滑条改变所执行的函数。这个回调函数也有一个默认参数,表示轨迹栏位置。我们并不关心函数做什么事,所以只是简单提一下。

轨迹栏的另一个重要应用是用作按钮或者开关。OpenCV在默认情况下没有按钮功能,因此我们用轨迹栏实现这样的功能。在我们的程序中创建了一个开关,其中程序只会在开关打开时有效,否则屏幕始终是黑色。

 1 import numpy as np
 2 import cv2 as cv
 3 
 4 
 5 def nothing(x):
 6     pass
 7 
 8 
 9 # 创建一个黑色图像,一个窗口
10 img = np.zeros((300, 512, 3), np.uint8)
11 cv.namedWindow('image')
12 # 创建一个改变颜色的轨迹栏
13 cv.createTrackbar('R', 'image', 0, 255, nothing)
14 cv.createTrackbar('G', 'image', 0, 255, nothing)
15 cv.createTrackbar('B', 'image', 0, 255, nothing)
16 # 创建一个用来启用和关闭功能的开关
17 switch = '0 : OFF \n1 : ON'
18 cv.createTrackbar(switch, 'image', 0, 1, nothing)
19 while (1):
20     cv.imshow('image', img)
21     k = cv.waitKey(1) & 0xFF
22     if k == 27:
23         break
24     # get current positions of four trackbars
25     r = cv.getTrackbarPos('R', 'image')
26     g = cv.getTrackbarPos('G', 'image')
27     b = cv.getTrackbarPos('B', 'image')
28     s = cv.getTrackbarPos(switch, 'image')
29     if s == 0:
30         img[:] = 0
31     else:
32         img[:] = [b, g, r]
33 cv.destroyAllWindows()

 

 

 

posted on 2024-10-08 13:42  认真的六六  阅读(7)  评论(0编辑  收藏  举报