opencv-基础使用

OpenCV于1999年由加里·布拉斯基(Gary Bradsky)在英特尔创立,并于2000年发布了第一个版本。Vadim Pisarevsky加入Gary Bradsky,管理英特尔俄罗斯软件OpenCV团队。2005年,OpenCV被用于斯坦利,赢得了2005年DARPA大挑战赛。后来,在Gary Bradsky和Vadim Pisarevsky领导的Willow Garage的支持下,该项目继续积极发展。OpenCV现在支持大量与计算机视觉和机器学习相关的算法,并且每天都在扩展。

OpenCV支持多种编程语言,如c++、Python、Java等,可在Windows、Linux、OS X、Android和iOS等不同平台上使用。基于CUDA和OpenCL的高速GPU操作接口也在积极开发中。

OpenCV-Python是OpenCV的Python API,结合了OpenCV c++ API和Python语言的最佳品质。

安装

pip3 install opencv-python

图片操作

imread()

imread(filename, flags=None)用于读取图像,返回一个numpy.ndarray对象。该函数接收两个参数:第一个参数为图片,图像应位于工作目录当中,或提供完整的工作目录;第二个为指定读取图像的方式:

  • cv2.IMREAD_COLOR: 值为1,加载彩色图像,图像的透明度将被忽略。这是默认项
  • cv2.IMREAD_GRAYSCALE: 值为0,加载灰色图像
  • cv2.IMREAD_UNCHANGED: 值为-1,加载图像,包括alpha通道
import cv2

img = cv2.imread('b.png', 0)

值得注意的是,即使图像路径错误,也不会引发任何错误,但是返回的img将会是None

imwrite()

imwrite(filename, img, params=None)用于保存图像。

  • filename: 将要保存的图片文件全路径
  • img: numpy.ndarray对象
import cv2

im = cv2.imread('b.png', 0)
cv2.imwrite('b_copy.png', im)

imshow()

imshow(winname, mat)在窗口中显示图像,窗口自动适合图像尺寸

  • winname: 窗口名称
  • mat: numpy.ndarray对象
cv2.imshow('image', im)

waitKey()

waitKey(delay=None)是键盘绑定功能,它的参数是以毫秒为单位的时间。如果在此期间按任意键,程序将继续。如果传递了0,它将无限期地等待击键。

destroyAllWindows()

destroyAllWindows()只会销毁我们创建的所有窗口。如果要销毁指定的窗口,我们可以使用cv2.destroyWindow()方法,然后需要传递指定的窗口名称即可

import cv2

cv2.destroyAllWindows()

视频操作

绘图操作

line

画线操作。line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)函数参数说明如下:

  • img: numpy.ndarray对象
  • pt1: 矩形左上角坐标点,为一个元组或列表
  • pt2: 矩形右下角坐标点,为一个元组或列表
  • color: 线条颜色
  • thickness: 线宽, -1表示填充
import cv2
import numpy as np

# 创建一个黑色背景板
img = np.zeros((512,512,3), np.uint8)
print(type(img))            # <class 'numpy.ndarray'>
# 画一条绿线, 从0,0开始,到400,400结束,线宽为1
cv2.line(img, (0, 0), (400, 400), (117, 251, 76), 1)
cv2.imshow('line', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

rectangle

绘制矩形操作。rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)函数参数说明如下:

  • img: numpy.ndarray对象
  • pt1: 矩形左上角坐标点,为一个元组或列表
  • pt2: 矩形右下角坐标点,为一个元组或列表
  • color: 线条颜色
  • thickness: 线宽, -1表示填充
import cv2
import numpy as np

# 创建一个黑色背景板
img = np.zeros((512,512,3), np.uint8)
print(type(img))            # <class 'numpy.ndarray'>
# 绘制矩形
cv2.rectangle(img, (50, 50), (130, 90), (117, 251, 76), 1)
cv2.imshow('rectangle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

circle

绘制圆形操作。circle(img, center, radius, color, thickness=None, lineType=None, shift=None)函数参数说明如下:

  • img: numpy.ndarray对象
  • center: 圆心坐标点,为一个元组或列表
  • radius: 半径长度
  • color: 线条颜色
  • thickness: 线宽, -1表示填充
import cv2
import numpy as np

# 创建一个黑色背景板
img = np.zeros((512,512,3), np.uint8)
print(type(img))            # <class 'numpy.ndarray'>
# 绘制圆形
cv2.circle(img, (200, 200), 50, (117, 251, 76), 1)
cv2.imshow('circle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

ellipse

绘制椭圆操作。ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=None, lineType=None, shift=None)函数参数说明如下:

  • img: numpy.ndarray对象
  • center: 圆心坐标点,为一个元组或列表
  • axes: 为一个包含长轴长度, 短轴长度的元组
  • angle: 椭圆沿逆时针旋转的角度
  • startAngle: 主轴沿顺时针方向测量的椭圆弧的起点
  • endAngle: 主轴沿顺时针方向测量的椭圆弧的终点。startAngle为0,endAngle为360时,将给出完整的椭圆
  • color: 线条颜色
  • thickness: 线宽, -1表示填充
import cv2
import numpy as np

# 创建一个黑色背景板
img = np.zeros((512,512,3), np.uint8)
print(type(img))            # <class 'numpy.ndarray'>
# 绘制椭圆
cv2.ellipse(img, (200, 200), (80, 40), 0, 0, 360, (117, 251, 76), 1)
cv2.imshow('circle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

用鼠标作为画笔

如果我们希望在画布上,鼠标随意点击一个地方就绘制一个圆,我们可以用到cv2.setMouseCallback(),这是一个监听鼠标事件的回调函数,使用如下:

import cv2
import numpy as np

def draw_circle(event, x, y, flags, params):
    if event == cv2.EVENT_LBUTTONDOWN:
        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:     # 按下Esc键
        break
cv2.destroyAllWindows()

轨迹栏作为调色板

在这里,我们将创建一个简单的应用程序,以显示你指定的颜色。你有一个显示颜色的窗口,以及三个用于指定B、G、R颜色的跟踪栏。滑动轨迹栏,并相应的更改窗口的颜色。默认情况下,窗口颜色将设置为黑色!代码如下:

import cv2
import numpy as np

def progress_value_changed(x):
    pass
    
img = np.zeros((512, 512, 3), np.uint8)
cv2.namedWindow('image')
cv2.createTrackbar('R', 'image', 0, 255, progress_value_changed)
cv2.createTrackbar('G', 'image', 0, 255, progress_value_changed)
cv2.createTrackbar('B', 'image', 0, 255, progress_value_changed)
switch = 'OFF/ON'
cv2.createTrackbar(switch, 'image', 0, 1, progress_value_changed)
while(1):
    cv2.imshow('image', img)
    if cv2.waitKey(20) & 0xFF == 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()

下面,来对用到的两个函数进行讲解一下:

createTrackbar(trackbarName, windowName, value, count, onChange): 创建拖动条

  • trackbarName: 拖动条名称
  • windowName: 窗口名称
  • value: 当前拖动条的值
  • count: 拖动条最大值
  • onChange: 拖动条值变化回调函数

getTrackbarPos(trackbarname, winname): 获取拖动条的值

  • trackbarname: 拖动条名称
  • winname: 窗口名称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值