opencv基础学习--3.OpenCV实现图形的绘制

OpenCV实现图形的绘制

一、OpenCV绘制直线

line(img, 开始点, 结束点, 颜色,…)

  • img: 在哪个图像上画线
  • 开始点、结束点:指定线的开始与结束位置
  • 颜色、线宽、线型
  • Shift:坐标缩放比例
import cv2
import numpy as np


img = np.zeros((480, 640, 3), np.uint8)

# 画线,坐标点为(x,y),颜色,线宽
cv2.line(img, (10, 20), (300, 400), (0, 0, 255), 5)
cv2.imshow("draw", img)

cv2.waitKey(0)

二、OpenCV绘制矩形

第一个参数为背景图,第二三个参数为对角线坐标点,第四个是颜色,第五个为粗细

import cv2
import numpy as np

img = np.zeros((480, 640, 3), np.uint8)
size = np.shape(img)
print(size) #  (1728, 3072, 3)
# 第一个参数为背景图,第二三个参数为对角线坐标点,第四个是颜色,第五个为粗细
cv2.rectangle(img, pt1=(300, 0), pt2=(500, 150), color=(0, 255, 0), thickness=3)

cv2.imshow('juzhen', img)
if cv2.waitKey(0) & 0xFF == ord('q'):
    cv2.destroyAllWindows()

三、OpenCV绘制圆

第一个参数为背景图,第二个参数为中心点,第三个为半径,第四为颜色,第五为粗细

import cv2

img = cv2.imread("2018-11-28_16-30-49.jpg", cv2.IMREAD_COLOR)
size = img.shape
print size # (1728, 3072, 3)

# 第二个参数为中心点,第三个为半径,第四为颜色,第五为粗细
cv2.circle(img, center=(400, 60), radius=60, color=(0, 255, 255), thickness=-1)

cv2.imshow('aaa', img)
if cv2.waitKey(0) & 0xFF == ord('q'):
    cv2.destroyAllWindows()

四、OpenCV绘制椭圆

ellipse(img,中心点,长宽的一半,角度,从哪个角度开始,到哪个角度结束, …)

import cv2
import numpy as np

img = np.zeros((480, 640, 3), np.uint8)
size = np.shape(img)
print(size) #  (1728, 3072, 3)
# 背景;对角点第一个点与第二个点的一半作为半径;旋转角度;从哪个角度开始;到哪个角度结束;颜色;最后一个是填充颜色
cv2.ellipse(img, (320, 240), (100, 50),  0, 0, 360, (0, 0, 255), -1)

cv2.imshow('tuoyuan', img)
if cv2.waitKey(0) & 0xFF == ord('q'):
    cv2.destroyAllWindows()

五、OpenCV绘制多边形

polylines(img, 点集{点集内容必须为32位}, 是否闭环, 颜色,…)

  • 与之前的不同,填充颜色不可在尾部用-1形式。要用特殊方式进行填充
import cv2
import numpy as np

img = np.zeros((480, 640, 3), np.uint8)
size = np.shape(img)
print(size) #  (1728, 3072, 3)

# 创建点集
pts = np.array([(300, 10), (150, 100), (450, 100)], np.int32)
cv2.polylines(img, [pts], True, (0, 0, 255))

cv2.imshow('tuoyuan', img)
if cv2.waitKey(0) & 0xFF == ord('q'):
    cv2.destroyAllWindows()

填充多边形:
fillPoly(img,点集,颜色)

import cv2
import numpy as np

img = np.zeros((480, 640, 3), np.uint8)
size = np.shape(img)
print(size) #  (1728, 3072, 3)

# 创建点集
pts = np.array([(300, 10), (150, 100), (450, 100)], np.int32)
cv2.polylines(img, [pts], True, (0, 0, 255))

cv2.fillPoly(img, [pts], (0, 0, 255))
cv2.imshow('tuoyuan', img)
if cv2.waitKey(0) & 0xFF == ord('q'):
    cv2.destroyAllWindows()

六、OpenCV绘制字本

putText(img,字符串,启始点,字体,字号,…)

import cv2
import numpy as np

img = np.zeros((480, 640, 3), np.uint8)
size = np.shape(img)
print(size) #  (1728, 3072, 3)

# 背景图;内容;位置;字体类型;字体大小了;颜色
cv2.putText(img, "HelloWorld", (10, 400), cv2.FONT_HERSHEY_PLAIN, 1, (0, 0, 255))
cv2.imshow('tuoyuan', img)
if cv2.waitKey(0) & 0xFF == ord('q'):
    cv2.destroyAllWindows()

七、图像绘制综合实战

import cv2
import numpy as np
# 基本功能:
# 可以通过鼠标进行基本图形的绘制
# 1.可以画线:当用户按下l键,即可选择了画线。此时,滑动鼠标即可画线。
# 2.可以画矩阵:当用户按下r键,即可选择了画矩阵。此时,滑动鼠标即可画矩阵。
# 3.可以画圆:当用户按下c键,即可选择了画圆。此时,滑动鼠标即可画圆。
# ...

# curshape: 0-画线,1-矩形,2-画圆
curshape = 0
# 初始坐标点
startpos = (0, 0)
# 显示窗口和背景
img = np.zeros((480, 640, 3), np.uint8)


# 设置鼠标回调
def mouse_callback(event, x, y, flags, userdata):
    # 定义全局变量
    global curshape, startpos
    print(event, x, y, flags, userdata)
    # 查看鼠标点击事件是否为左键
    if (event & cv2.EVENT_LBUTTONDOWN) == cv2.EVENT_LBUTTONDOWN:
        startpos = (x, y)

    elif (event & cv2.EVENT_LBUTTONUP) == cv2.EVENT_LBUTTONUP:
        if curshape == 0:
            cv2.line(img, startpos, (x, y), (0, 0, 255))
        elif curshape == 1:
            cv2.rectangle(img, pt1=startpos, pt2=(x, y), color=(0, 255, 0), thickness=3)
        elif curshape == 2:
            a = (x - startpos[0])
            b = (y - startpos[1])
            r = int((a**2+b**2)**0.5)
            cv2.circle(img, startpos, r, (0, 0, 255))
        else:
            print("error:无效错误")


# 创建窗口
cv2.namedWindow("draws", cv2.WINDOW_NORMAL)

# 设置鼠标回调
cv2.setMouseCallback("draws", mouse_callback)


while True:
    cv2.imshow("draws", img)
    key = cv2.waitKey(1) & 0xFF
    if key == ord('q'):
        break
    elif key == ord('l'):
        curshape = 0
    elif key == ord('r'):
        curshape = 1
    elif key == ord('c'):
        curshape = 2

cv2.destroyAllWindows()

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值