栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Opencv入门教程

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Opencv入门教程

Opencv 

目录

Opencv 

第一章:图像基本操作

1.1 读取图像imread()

1.2 显示图像imshow()

1.3 销毁窗口cv2.destroyAllWindows()

1.4 保存图像

1.5 获取图像性质

第二章 像素的操作

2.1 : 像素

2.1.3修改像素的RGB值

2.2 使用NumPy模块操作像素

2.3 创建数组

2.3.2 操作数组

2.3.3 数组的索引和切片

2.3.4 创建图像


第一章:图像基本操作

1.1 读取图像imread()
img = cv2.imread("img.jpg")#图片路径
print(img)

1.2 显示图像imshow()
cv2.imshow("窗口名",图片路径)
#图片路径是读取图片返回的地址
cv2.imshow("imgage",img)
#与读取键盘按键同时使用
cv2.WaitKey() #返回值为 所按按键的ASCII码值
参数cv2.WaitKey(delay) #delay为窗口存在的时间 单位为ms
#例如
retval = cv2.waitKey(delay)

1.3 销毁窗口cv2.destroyAllWindows()
cv2.destroyAllWindows()
#销毁所有窗口

1.4 保存图像
cv2.imwrite(filename,img)
#filename 保存图像的完整路径
#img 要保存的图像

1.5 获取图像性质

图像的基本属性:shape、size、dtype

shape : 彩色图像 获得图像的水平像素、垂直像素、通道数

灰度图像 获得图像的水平像素、垂直像素、

size : 获取图像包含的像素个数 值为(水平像素 * 垂直像素 * 通道数(3个 (RGB)))

灰度图像的通道数为1

dtype:获取图像的数据类型

import cv2
​
a = cv2.imread("imgage/2.jpg")
print("shape = ",  a.shape)
print(a.size)
print(a.dtype)
print("n")
​
b = cv2.imread("imgage/2.jpg", 0)
print(b.shape)
print(b.size)
print(b.dtype)
​
#输出结果
shape =  (747, 1269, 3)
2843829
uint8
​
(747, 1269)
947943
uint8

第二章 像素的操作

2.1 : 像素

2.1.1确定像素的位置

import cv2
img = cv2.imread("imgage/2.jpg")
px = img[100, 100]

2.1.2 获取像素的RGB值

import cv2
img = cv2.imread("imgage/2.jpg")
px1 = img[100, 100, 0]
px2 = img[100, 100, 1]
px3 = img[100, 100, 2]
print(px1, px2, px3)
#结果
#255 250 241

2.1.3修改像素的RGB值

2.1.3.1修改单个像素点的RGB值

import cv2
img = cv2.imread("imgage/2.jpg")
px1 = img[100, 100]
print('修改前的像素值为', px1)
px2 = img[100, 100, 1]
px3 = img[100, 100, 2]
px1 = [100, 100, 100]
print(px2, px3, 'n', '修改后的像素值为', px1)
​
#输出
修改前的像素值为 [255 250 241]
250 241 
修改后的像素值为 [100, 100, 100]

R=G=B=0为纯黑

R=G=B=255为纯白色

2.1.3.2 修改某范围内的像素值

将某范围内的像素都变为白色

import cv2
img = cv2.imread("imgage/2.jpg")
cv2.imshow("1", img)
for i in range(100, 140):
    for x in range(100, 145):
        img[i, x] = [0, 0, 0]
cv2.imshow("2", img)
cv2.waitKey()
print(img)

2.2 使用NumPy模块操作像素

2.2.1 NumPy概述

NumPy是c语言实现的所以速度非常快

一、有一个强大的N维数组对象(ndarray)

二、广播功能方法

三、线性代数、傅里叶变换、随机数生成、图形操作等功。

四、整合c/c++/Fortran代码的工具

2.2.2 数组的类型

NumPy数据类型

bool_布尔型数据类型(True 或者 False)
int_默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
intc与 C 的 int 类型一样,一般是 int32 或 int 64
intp用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8字节(-128 to 127)
int16整数(-32768 to 32767)
int32整数(-2147483648 to 2147483647)
int64整数(-9223372036854775808 to 9223372036854775807)
uint8无符号整数(0 to 255)
uint16无符号整数(0 to 65535)
uint32无符号整数(0 to 4294967295)
uint64无符号整数(0 to 18446744073709551615)
float_float64 类型的简写
float16半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_complex128 类型的简写,即 128 位复数
complex64复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128复数,表示双 64 位浮点数(实数部分和虚数部分)
datatime64使日期时间类型
timedalta两个时间之间的间隔

numpy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符,包括 np.bool_,np.int32,np.float32,等等。

每一种数据类型都有相应的数据转换方式

import numpy as np
print(np.int8(3.14))
print(np.float64(3.14))
print(np.float16(True))
#输出
3
3.14
1.0

2.3 创建数组

2.3.1 最常规的array()方法

numpy.array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0)

[numpy.array用法​]  https://www.cjavapy.com/article/831/ 

2.3.1.1创建一维和二维数组

import numpy as np
n1 = np.array([1, 2, 3])
n2 = np.array([0.1, 0.2, 0.3])
n3 = np.array([[1, 2], [2, 3]])
print(n1, 'n', n2, 'n', n3)
[1 2 3] 
 [0.1 0.2 0.3] 
 [[1 2]
 [2 3]]

2.3.1.2创建浮点型数组

import numpy as np
list1 = [1, 2, 3]
n1 = np.array(list1, dtype=np.float_)
print(n1)
print(n1.dtype)
print(n1[0])
#输出
[1. 2. 3.]
float64
1.0

2.3.1.3创建三维数组

import numpy as np
list1 = [1, 2, 3]
n1 = np.array(list1, dtype=np.float_, ndmin=3)
print(n1)
print(n1[0])
#输出
[[[1. 2. 3.]]]
[[1. 2. 3.]]

2.3.1.4创建未初始化的2行3列数组

import numpy as np
n = np.empty([2, 3])
print(n)
#输出
[[0.   0.15 0.25]
 [0.5  0.75 1.  ]]

2.3.1.5创建用0填充的数组

import numpy as np
n = np.zeros([2, 3], np.uint8)
print(n)
#输出
[[0 0 0]
 [0 0 0]]

2.3.1.6创建用1填充的数组

import numpy as np
n = np.ones([2, 3], np.uint8)
print(n)
#输出
[[1 1 1]
 [1 1 1]]

2.3.1.7创建随机数组

#np.random.randint(low, hight, size)
import numpy as np
n = np.random.randint(0, 255, 10)
print(n)
#在0 和 254之间随机生成10个数字
#low 与 hight 可以为负

2.3.2 操作数组

2.3.2.1 加法、减法、乘法、除法、幂运算

import numpy as np
n1 = np.array([1, 2])
n2 = np.array([3, 4])
print('加法运算',n1 + n2)
print('减法运算',n1 - n2)
print('乘法运算',n1 * n2)
print('除法运算',n1 / n2)
print('幂运算', n1 ** n2)
#输出
#加法运算 [4 6]
#减法运算 [-2 -2]
#乘法运算 [3 8]
#除法运算 [0.33333333 0.5]
幂运算 [ 1 16]

2.3.2.2 比较运算

import numpy as np
n1 = np.array([1, 2])
n2 = np.array([3, 4])
print(n1 >= n2)
print(n1 <= n2)
print(n1 == n2)
print(n1 != n2)
#输出
[False False]
[ True  True]
[False False]
[ True  True]

2.3.2.3 复制数组

import numpy as np
n1 = np.array([1, 2])
n2 = np.array(n1, copy=True)
print(n1, n2)
#输出
[1 2] 
[1 2]

2.3.3 数组的索引和切片

2.3.3.1 :索引

类似于数组下标

import numpy as np
n1 = np.array([1, 2, 3, 4])
print(n1[0], n1[3])
#输出
1 4

2.3.3.2 切片

import numpy as np
n1 = np.array([1, 2, 3, 4])
print(n1[0])
print(n1[1])
print(n1[0:2])
print(n1[1:])
print(n1[:2])
#输出
1
2
[1 2]
[2 3 4]
[1 2]

2.3.3.3二维数组索引

import numpy as np
n1 = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [8, 9, 10, 11]])
print(n1[-1])
print(n1[2, 3])
print(n1[1])
#输出
[ 8  9 10 11]
11
[4 5 6 7]

2.3.3.4二维数组切片式索引

import numpy as np
n1 = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [8, 9, 10, 11]])
print(n1[::-1, ::-1])
print(n1[::1, ::1])
print(n1[:3:2, :3:2])
#输出
[[11 10  9  8]
 [ 7  6  5  4]
 [ 4  3  2  1]]
[[ 1  2  3  4]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[[ 1  3]
 [ 8 10]]

2.3.4 创建图像

2.3.4.1创建全黑图像

import numpy as np
import cv2
width = 200
height = 100
img = np.zeros((height, width), np.uint8)
cv2.imshow("1", img)
cv2.waitKey()
cv2.destroyAllWindows()
输出

输出y = 100 x=200的全黑图像

2.3.4.2创建纯白图像

import numpy as np
import cv2
width = 200
height = 100
img = np.ones((height, width), np.uint8) * 255
cv2.imshow("1", img)
cv2.waitKey()
cv2.destroyAllWindows()

2.3.4.3在黑像素中创建一块白

import numpy as np
import cv2
width = 200
height = 100
img = np.zeros((height, width), np.uint8)
img[25:75:, 100:150:] = 255
cv2.imshow("1", img)
cv2.waitKey()
cv2.destroyAllWindows()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011180.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号