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 获取图像性质
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 获取图像性质
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()



