OpenCV入门4——实现图形的绘制

文章目录

  • OpenCV绘制直线
  • OpenCV绘制矩形和圆
    • 画矩形
    • 画圆
  • OpenCV椭圆的绘制
  • OpenCV绘制多边形
  • OpenCV绘制文本
  • 实现鼠标绘制基本图形

OpenCV入门4——实现图形的绘制_第1张图片
OpenCV入门4——实现图形的绘制_第2张图片

OpenCV绘制直线

OpenCV入门4——实现图形的绘制_第3张图片
OpenCV入门4——实现图形的绘制_第4张图片
OpenCV入门4——实现图形的绘制_第5张图片
OpenCV入门4——实现图形的绘制_第6张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = np.zeros((480, 640, 3), np.uint8)
# 坐标点为(x, y)
cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)

cv2.imshow('draw', img)

key = cv2.waitKey(0)
if key & 0xff == ord('q'):
    cv2.destroyAllWindows()

OpenCV入门4——实现图形的绘制_第7张图片

OpenCV绘制矩形和圆

详情参看官方文档

画矩形

OpenCV入门4——实现图形的绘制_第8张图片
OpenCV入门4——实现图形的绘制_第9张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

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

# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)

# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)

cv2.imshow('draw', img)

key = cv2.waitKey(0)
if key & 0xff == ord('q'):
    cv2.destroyAllWindows()

OpenCV入门4——实现图形的绘制_第10张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

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

# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)

# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)

cv2.imshow('draw', img)

key = cv2.waitKey(0)
if key & 0xff == ord('q'):
    cv2.destroyAllWindows()

OpenCV入门4——实现图形的绘制_第11张图片

画圆

OpenCV入门4——实现图形的绘制_第12张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

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

# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)

# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)

# 画圆
cv2.circle(img, (320, 240), 30, (0, 255, 0), -1)

cv2.imshow('draw', img)

key = cv2.waitKey(0)
if key & 0xff == ord('q'):
    cv2.destroyAllWindows()

OpenCV入门4——实现图形的绘制_第13张图片

OpenCV椭圆的绘制

OpenCV入门4——实现图形的绘制_第14张图片
OpenCV入门4——实现图形的绘制_第15张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

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

# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)

# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)

# 画圆
# cv2.circle(img, (320, 240), 30, (0, 255, 0), -1)
cv2.circle(img, (320, 240), 100, (0, 255, 0))
cv2.circle(img, (320, 240), 5, (255, 0, 0), -1)

# 画椭圆
# 长方形的度若为0则是从右侧x正轴开始的,顺时针旋转
cv2.ellipse(img, (320, 240), (100, 50), 0, 0, 360, (0, 255, 0))

cv2.imshow('draw', img)

key = cv2.waitKey(0)
if key & 0xff == ord('q'):
    cv2.destroyAllWindows()

OpenCV入门4——实现图形的绘制_第16张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

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

# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)

# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)

# 画圆
# cv2.circle(img, (320, 240), 30, (0, 255, 0), -1)
cv2.circle(img, (320, 240), 100, (0, 255, 0))
cv2.circle(img, (320, 240), 5, (255, 0, 0), -1)

# 画椭圆
# 长方形的度若为0则是从右侧x正轴开始的,顺时针旋转
cv2.ellipse(img, (320, 240), (100, 50), 90, 45, 90, (0, 255, 0), -1)

cv2.imshow('draw', img)

key = cv2.waitKey(0)
if key & 0xff == ord('q'):
    cv2.destroyAllWindows()

OpenCV入门4——实现图形的绘制_第17张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

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

# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)

# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)

# 画圆
# cv2.circle(img, (320, 240), 30, (0, 255, 0), -1)
cv2.circle(img, (320, 240), 100, (0, 255, 0))
cv2.circle(img, (320, 240), 5, (255, 0, 0), -1)

# 画椭圆
# 长方形的度若为0则是从右侧x正轴开始的,顺时针旋转
cv2.ellipse(img, (320, 240), (100, 50), 15, 0, 360, (0, 255, 0))

cv2.imshow('draw', img)

key = cv2.waitKey(0)
if key & 0xff == ord('q'):
    cv2.destroyAllWindows()

OpenCV入门4——实现图形的绘制_第18张图片

OpenCV绘制多边形

OpenCV入门4——实现图形的绘制_第19张图片
点集必须为32位
OpenCV入门4——实现图形的绘制_第20张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

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

# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)

# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)

# 画圆
# cv2.circle(img, (320, 240), 30, (0, 255, 0), -1)
# cv2.circle(img, (320, 240), 100, (0, 255, 0))
# cv2.circle(img, (320, 240), 5, (255, 0, 0), -1)

# 画椭圆
# 长方形的度若为0则是从右侧x正轴开始的,顺时针旋转
# cv2.ellipse(img, (320, 240), (100, 50), 15, 0, 360, (0, 255, 0))

# 画多边形
pts = np.array([(300, 10), (150, 100), (450, 100)], np.int32)
cv2.polylines(img, [pts], True, (0, 255, 0))

cv2.imshow('draw', img)

key = cv2.waitKey(0)
if key & 0xff == ord('q'):
    cv2.destroyAllWindows()

OpenCV入门4——实现图形的绘制_第21张图片
OpenCV入门4——实现图形的绘制_第22张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

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

# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)

# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)

# 画圆
# cv2.circle(img, (320, 240), 30, (0, 255, 0), -1)
# cv2.circle(img, (320, 240), 100, (0, 255, 0))
# cv2.circle(img, (320, 240), 5, (255, 0, 0), -1)

# 画椭圆
# 长方形的度若为0则是从右侧x正轴开始的,顺时针旋转
# cv2.ellipse(img, (320, 240), (100, 50), 15, 0, 360, (0, 255, 0))

# 画多边形
pts = np.array([(300, 10), (150, 100), (450, 100)], np.int32)
cv2.polylines(img, [pts], True, (0, 255, 0))

# 填充多边形
cv2.fillPoly(img, [pts], (255, 255, 0))

cv2.imshow('draw', img)

key = cv2.waitKey(0)
if key & 0xff == ord('q'):
    cv2.destroyAllWindows()

OpenCV入门4——实现图形的绘制_第23张图片

OpenCV绘制文本

OpenCV入门4——实现图形的绘制_第24张图片
OpenCV入门4——实现图形的绘制_第25张图片
OpenCV入门4——实现图形的绘制_第26张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

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

# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)

# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)

# 画圆
# cv2.circle(img, (320, 240), 30, (0, 255, 0), -1)
# cv2.circle(img, (320, 240), 100, (0, 255, 0))
# cv2.circle(img, (320, 240), 5, (255, 0, 0), -1)

# 画椭圆
# 长方形的度若为0则是从右侧x正轴开始的,顺时针旋转
# cv2.ellipse(img, (320, 240), (100, 50), 15, 0, 360, (0, 255, 0))

# 画多边形
# pts = np.array([(300, 10), (150, 100), (450, 100)], np.int32)
# cv2.polylines(img, [pts], True, (0, 255, 0))

# 填充多边形
# cv2.fillPoly(img, [pts], (255, 255, 0))

# 绘制文本
cv2.putText(img, "ILoveFS", (10, 400), cv2.FONT_HERSHEY_DUPLEX, 3, (0, 255, 0))

cv2.imshow('draw', img)

key = cv2.waitKey(0)
if key & 0xff == ord('q'):
    cv2.destroyAllWindows()

OpenCV入门4——实现图形的绘制_第27张图片

实现鼠标绘制基本图形

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

# curshape: 0-drawline, 1-drawrectangle, 2-drawcircle

# 显示窗口和背景
img = np.zeros((480, 640, 3), np.uint8)

curshape = 0
startpos = (0, 0)

# 创建窗口
cv2.namedWindow('mouse', cv2.WINDOW_NORMAL)

# 鼠标回调函数
def mouse_callback(event, x, y, flags, userdata):
    global startpos, curshape
    # 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, 255, 0))
        elif curshape == 1:
            cv2.rectangle(img, startpos, (x, y), (0, 255, 0))
        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: no shape')
    
# 设置鼠标回调
cv2.setMouseCallback('mouse', mouse_callback, "666")

while True:
    cv2.imshow('mouse', img)
    key = cv2.waitKey(0) & 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()

OpenCV入门4——实现图形的绘制_第28张图片

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

你可能感兴趣的:(OpenCV,opencv,人工智能,计算机视觉,经验分享)