【OpenCV入门】绘图函数

【OpenCV入门】绘图函数

画线操作

cv2.line(image,parameter1,parameter2,parameter3,parameter4)

  • 画线函数。
  • image:窗口名。
  • parameter1:起点坐标。坐标形式
  • parameter2:终点坐标。坐标形式
  • parameter3:线的颜色。坐标形式
  • parameter4:线宽。
  • **注意:**窗口的左上角为(0,0),右下角为(n,n)

numpy.zeros(parameter1,parameter2)

  • parameter1:数组的维数,如(3,3,4)。
  • parameter2:数据的类型。如uint8等。
  • 还有很多函数,比如:numpy.empty(parameter),创建一个空数组。numpty.ones(parameter),创建一个数组元素为1的数组。两个函数均只有一个参数。
import numpy as np
import cv2

img = np.zeros((512,512,3),np.uint8)
cv2.line(img,(0,0),(511,511),(255,0,0),5)
cv2.imshow("img",img)

cv2.waitKey(0)
画矩形操作

cv2.rectangle(img,parameter1,parameter2,parameter3,parameter4)

  • parameter1:起点
  • parameter2:终点
  • parameter3:颜色
  • parameter4:线宽
import numpy as np
import cv2

img = np.zeros((512,512,3),np.uint8)
cv2.rectangle(img,(0,0),(512,512),(0,0,255),3)
cv2.imshow("img",img)
cv2.waitKey(0)

画圆、画椭圆、画多边形

放置文字:cv2.putText(img,parameter1,parameter2,parameter3,parameter4,parameter5,parameter6)
  • parameter1:要放置的字符。
  • parameter2:起点
  • parameter3:字体
  • parameter4:大小
  • parameter5:颜色
  • parameter6:线宽
import numpy as np
import cv2

img = "haha"
cv2.namedWindow(img)
img1 = np.zeros((512,512,3),np.uint8)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img1,"OpenCV",(50,100),font,2,(255,255,255),5)
cv2.rectangle(img1,(0,0),(512,512),(0,0,255),3)
cv2.imshow(img,img1)
cv2.waitKey(0)
鼠标操作

鼠标事件

import cv2
events=[i for i in dir(cv2) if 'EVENT'in i]
print(events)  #可用于查看具有的鼠标事件

cv2.setMouseCallback()

  • 鼠标事件回调函数。括号内为定义的回调函数名。
import cv2
import numpy as np

def draw_circle(event,x,y,flags,param):
    if event == cv2.EVENT_FLAG_LBUTTON:
        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()

一个小实验:

import numpy as np
import cv2

# 这两个参数是用来转换状态的
mode = True
draw_state = False

ix,iy = -1,-1

def mouse_call(event,x,y,flag,param):
    global mode,draw_state,ix,iy
    if event == cv2.EVENT_LBUTTONDOWN:
        draw_state = True
        print("draw_state = {}".format(draw_state))
        ix,iy = x,y
        print("ix = {} iy = {}".format(str(ix),str(iy)))
    elif event == cv2.EVENT_MOUSEMOVE and flag == cv2.EVENT_FLAG_LBUTTON:
        print("mode = {}".format(mode))
        print("draw_state = {} ".format(draw_state))
        if draw_state == True:
            if mode == True:
                print("---->  ix = {} iy = {}".format(ix,iy))
                print("---->  x = {} y = {}".format(x, y))
                cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
            else:
                cv2.circle(img,(x,y),3,(0,255,0),-1)
    elif event == cv2.EVENT_LBUTTONUP:
        draw_state = False
    else:
        pass


img = np.zeros((512,512,3),np.uint8)
cv2.namedWindow("image")
cv2.setMouseCallback("image",mouse_call)

while(1):
    cv2.imshow("image",img)
    k = cv2.waitKey(1) & 0xff
    if k == ord('m'):
        mode = not mode
    elif k == 27:
        break

cv2.waitKey(0)
cv2.destroyAllWindows("image")
滑动条做调色板

cv2.createTrackbar(parameter1,parameter2,parameter3,parameter4,parameter5)

  • parameter1:滑条名称
  • parameter2:要显示的窗口名称。
  • parameter3:起始值。
  • parameter4:结束值。
  • parameter5:滑块位置。

cv2.getTrackbarPos(parameter1,parameter2)

  • parameter1:滑块名称。
  • parameter2:窗口名称。
import numpy as np
import cv2

def nothing():
    pass



img = np.zeros((512,512,3),np.uint8)
cv2.namedWindow("image")

R = cv2.createTrackbar("R","image",0,255,nothing)
G = cv2.createTrackbar("G","image",0,255,nothing)
B = cv2.createTrackbar("B","image",0,255,nothing)
switch = "ON/OFF"
switch = cv2.createTrackbar("switch","image",0,1,nothing)

while(1):
    cv2.imshow("image",img)
    if (cv2.waitKey(1) & 0xff) == 27:
        break


    x = cv2.getTrackbarPos("R","image")
    y = cv2.getTrackbarPos("G","image")
    z = cv2.getTrackbarPos("B","image")
    s = cv2.getTrackbarPos("switch","image")

    if s == 0:
        img[:] = 0
    else:
        img[:] = [x,y,z]


cv2.destroyAllWindows("image")

有不懂的滴滴我!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值