opencv-基础使用
创始人
2024-06-01 04:49:47
0

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 cv2img = cv2.imread('b.png', 0)

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

imwrite()

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

  • filename: 将要保存的图片文件全路径
  • img: numpy.ndarray对象
import cv2im = 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 cv2cv2.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))            # 
# 画一条绿线, 从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))            # 
# 绘制矩形
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))            # 
# 绘制圆形
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))            # 
# 绘制椭圆
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 npdef 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 npdef progress_value_changed(x):passimg = 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:breakr = cv2.getTrackbarPos('R', 'image')g = cv2.getTrackbarPos('G', 'image')b = cv2.getTrackbarPos('B', 'image')s = cv2.getTrackbarPos(switch, 'image')if s == 0:img[:] = 0else:img[:] = [b, g, r]
cv2.destroyAllWindows()

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

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

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

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

  • trackbarname: 拖动条名称
  • winname: 窗口名称

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...