OpenCV入门-基于Python(下)

简介: OpenCV入门-基于Python

5. trackBar组件

createTrackbar()

用于创建一个tarckbar,目的是进行调节量

cv2.createTrackbar(trackbarname,winname,value,count,callback,userdata)

trackbarname:轨道名称

winname:将该组件和winname绑定。

value:组件的当前值。

count:组件的最大值,从0开始算。

callback:回调函数

userdata:用户自己传的数据

getTrackbarPos()

用于获取trackbar的位置

cv2.getTrackbarPos(trackbarname,winname)

taackbainame:trackbar的控件名称

winname:控件绑定的窗口

返回值 trackbar的位置

部分代码示例

import cv2
import numpy as np
def track_callback():
    pass
# 创建一个窗口
cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL)
cv2.resizeWindow('trackbar', 640, 480)
# 创建一个全黑图像
img = np.zeros((480, 640, 3), np.uint8)
# 创建三个trackbar
cv2.createTrackbar('R', 'trackbar', 0, 255, track_callback)
cv2.createTrackbar('G', 'trackbar', 0, 255, track_callback)
cv2.createTrackbar('B', 'trackbar', 0, 255, track_callback)
while True:
    # 首先展示图片
    cv2.imshow('trackbar', img)
    # 获取三个trackbar的值
    r = cv2.getTrackbarPos('R', 'trackbar')
    g = cv2.getTrackbarPos('G', 'trackbar')
    b = cv2.getTrackbarPos('B', 'trackbar')
    key = cv2.waitKey(10)
    if key & 0xff == ord('q'):
        print("退出成功")
        break
    img[:] = [b, g, r]
# 释放资源
cv2.destroyAllWindows()

7.Numpy基础(为了方便调用,用np表示)

在OpenCV中用到的矩阵都要转换成Numpy数组,Numpy是一个高度优化的数值库,速度很快。

Numpy库创建矩阵

array()

直接创建数组

np.array(mat)

mat:一维数组[1,2,3],二维数组:[[1,2,3],[4,5,6],[7,8,9]]…

返回值是一个数组

zeros()/ones

创建全0/1的数组

np.zeros((row,col,通道数/层数),数据类型)

参数: 第一个三元组,是矩阵的行数、列数、通道数;第二个是数据类型

返回值是一个数组

full()

创建全值数组(矩阵全部为一个数值)

np.full((row,col,通道数/层数),val,数据类型)

参数: 第一个三元组,是矩阵的行数、列数、通道数;第二个是矩阵的数值;第三个是数据类型

返回值是一个数组

identity()/eye()

创建单元数组

np.identy(n)/np.eye(n)

参数:n:创建n*n的单位矩阵

返回值是一个数组

np.eye(row,col ,k)

参数:row行col列数组,从第1行第k个数字,开始写1,可以不是正方形

返回值是一个数组

代码演示

import cv2
import numpy as np
# 创建一维,二维数组
a = np.array([1, 2, 3])
b = np.array([[1,2, 3],[4,5,6],[7,8,9]])
print(a)
print(b)
# 创建全0/1数组
# 这样写会显示8*8的矩阵,如果换成(8,8,3)
# 由于print解释不同,会打印成8个8*3的矩阵
c = np.zeros((8, 8),np.uint8)
d = np.ones((8, 8),np.uint8)
print(c)
print(d)
# 创建全值矩阵,每个值都为10
e = np.full((5, 5), 10, np.uint8)
print(e)
# 创建单位矩阵
f = np.identity(5)
g = np.eye(2)
print(f)
print(g)
# 不是正方形的单位矩阵
# 从第一行k开始为1
h = np.eye(2, 3, 1)
print(h)

Numpy检索与赋值

key:用python访问和修改数组

[y,x] 坐标是反过来的

[y,x,channel] 访问指定通道的值

==[y1:y2,x1:x2]==访问该区间的值

[:,:]与[:]相等访问范围内的所有坐标

[:,10] 访问横坐标是10的所有坐标

代码演示

import cv2
import numpy as np
# 创建一个全0的数组
a = np.zeros((480, 640, 3), np.uint8)
# 直接展示图像
cv2.imshow('a', a)
# 将一个范围修改为绿色
# a[100:200, 100:200] = [0, 255, 0] 和下面的方法相等,都是修改绿色通道
# a[100:200, 100:200, 1] = [255]
# 修改横坐标为20的所有坐标
# a[:,20] = [0, 0, 255]
# 访问全体
a[:] = [255,255,255]
cv2.imshow('a2', a)
cv2.waitKey(0)

Mat

mat在python中代表的是数组对象,这个对象主要包含mat属性以及数据。在python中,每个数组都有这些属性。

img.shape :显示高度,长度和通道数

img.size:图像占用多大空间

img.dtype:每个元素的位深

代码演示

# 创建一个全0的数组
a = np.zeros((480, 640, 3), np.uint8)
print(a.shape)
print(a.size)
print(a.dtype)

深浅拷贝

日常直接创建变量的方法是浅拷贝,虽然变量名不同,但是共享同一块数据,改变其中一个变量,另一个变量的数据也跟着改变,这是浅拷贝。如果完全复制一份同样的数据存到另一个变量中,两个变量的改变互不影响,这个就是深拷贝。

img3 = img.copy()

代码演示:

# 深浅拷贝
# 创建一个全0的数组
img1 = np.zeros((480, 640, 3), np.uint8)
# img3为深拷贝,img2为浅拷贝
img3 = img1.copy()
img2 = img1
img2[100:200,100:200] = [255,0,255]
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.imshow('img3',img3)
cv2.waitKey(0)
cv2.destroyAllWindows()

通道分离与合并

将BGR三个通道拆分与合并

split()

将图片的BGR通道拆开成B,G,R三个通道。

cv2.split(mat)

mat:需要拆分的图像

返回值有三个,用三个变量接收

merge()

将拆分的通道合成一个图像

cv2.merge((ch1,ch2,ch3))

参数:ch1,ch2,ch3分别代表各个通道,并且用元组表示。

返回值是拼好的图像

代码展示

# 创建一个全黑的图像
img = np.zeros((480, 640, 3),np.uint8)
# BGR通道分割
r, g, b = cv2.split(img)
# 仅仅修改两个通道的颜色
r[100:200, 100:200] = 255
b[100:200, 100:200] = 255
# 再次合并成新图形
img2 = cv2.merge((b, g, r))
cv2.imshow('img', img)
cv2.imshow('img2', img2)

8. 图像的基本操作

cvtColor()

用于将图像从一个颜色空间转换为另一个颜色空间。

dst = cv2.cvtColor(src,flag)

src:需要转换的图像

flag:见下表

返回值dst,转换颜色空间后的图像

(flag)标志 简记 作用
cv2.COLOR_BGR2BGRA 0 为RGB图像添加alpha通道
cv2.COLOR_BGR2RGB 4 由BGR变成RGB顺序
cv2.COLOR_BGR2GRAY 10 将彩色图像变成灰度图像
cv2.COLOR_BGR2YUV 82 从RGB颜色空间转成YUV颜色空间
cv2.COLOR_BGR2HSV 40 从RGB颜色空间转成HSV颜色空间

部分代码展示:

import cv2
def callback(x):
    pass
# 创建窗口
cv2.namedWindow('color',cv2.WINDOW_NORMAL)
cv2.resizeWindow('color', 640, 480)
# 读取一个图像
img = cv2.imread('./image/girl.png')
# 创建一个列表
colorspaces = [cv2.COLOR_BGR2RGB, cv2.COLOR_BGR2BGRA, cv2.COLOR_BGR2GRAY,
               cv2.COLOR_BGR2YUV, cv2.COLOR_BGR2HSV]
# 创建一个trackbar
cv2.createTrackbar('cvt_color', 'color', 0, len(colorspaces)-1, callback)
while True:
    # 获取trackbar位置
    index = cv2.getTrackbarPos('cvt_color', 'color')
    # 转换图像
    cvt_img = cv2.cvtColor(img, colorspaces[index])
    cv2.imshow('color', cvt_img)
    key = cv2.waitKey(10)
    if key & 0xff == ord('q'):
        break
# 销毁资源
cv2.destroyAllWindows()


目录
相关文章
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
9天前
|
存储 数据挖掘 数据处理
Python Pandas入门:行与列快速上手与优化技巧
Pandas是Python中强大的数据分析库,广泛应用于数据科学和数据分析领域。本文为初学者介绍Pandas的基本操作,包括安装、创建DataFrame、行与列的操作及优化技巧。通过实例讲解如何选择、添加、删除行与列,并提供链式操作、向量化处理、索引优化等高效使用Pandas的建议,帮助用户在实际工作中更便捷地处理数据。
20 2
|
15天前
|
人工智能 编译器 Python
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
|
1月前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
1月前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
44 7
|
1月前
|
开发者 Python
Python中的装饰器:从入门到实践
本文将深入探讨Python的装饰器,这一强大工具允许开发者在不修改现有函数代码的情况下增加额外的功能。我们将通过实例学习如何创建和应用装饰器,并探索它们背后的原理和高级用法。
48 5
|
1月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
88 3
|
8月前
|
人工智能 Java Python
python入门(二)安装第三方包
python入门(二)安装第三方包
111 1
|
3月前
|
机器学习/深度学习 Python
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
本篇将详细介绍如何在Mac系统上安装和配置Anaconda,如何创建虚拟环境,并学习如何使用 `pip` 和 `conda` 管理Python包,直到成功运行第一个Python程序。通过本篇,您将学会如何高效地使用Anaconda创建和管理虚拟环境,并使用Python开发。
119 4
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
|
3月前
|
IDE 开发工具 iOS开发
【10月更文挑战第3天】「Mac上学Python 3」入门篇3 - 安装Python与开发环境配置
本篇将详细介绍如何在Mac系统上安装Python,并配置Python开发环境。内容涵盖Python的安装、pip包管理工具的配置与国内镜像源替换、安装与配置PyCharm开发工具,以及通过PyCharm编写并运行第一个Python程序。通过本篇的学习,用户将完成Python开发环境的搭建,为后续的Python编程工作打下基础。
369 2
【10月更文挑战第3天】「Mac上学Python 3」入门篇3 - 安装Python与开发环境配置