OpenCV需要的Numpy知识
图像 NumPy 数组彩色图(高度, 宽度, 3)灰度图(高度, 宽度)像素值0~255类型uint8下面所有内容都围绕这句话。1. 创建数组1.1 np.array () —— 把列表变成数组import numpy as np a np.array([1, 2, 3]) b np.array([[1,2], [3,4]])OpenCV 用途几乎不手动这么建图一般是cv2.imread读完直接是数组。1.2 np.zeros () —— 创建全黑图超级常用# 高 480宽 6403通道 黑色图 img np.zeros((480, 640, 3), dtypenp.uint8)OpenCV 用途创建一块黑板在上面画图、写字做掩膜 mask抠图、人脸检测、轮廓过滤# 例子创建纯黑图画矩形 img np.zeros((480, 640, 3), dtypenp.uint8) cv2.rectangle(img, (50,50), (200,200), (0,255,0), 2) #cv2.rectangle(img, (左上角坐标),(右下角坐标),(图像颜色),线条粗细)1.3 np.ones () —— 全 1 数组img np.ones((480,640,3), dtypenp.uint8) * 255OpenCV 用途创建全白背景white np.ones((480,640), np.uint8) * 2551.4 np.arange () —— 生成连续数字a np.arange(0, 256, 50) # 0,50,100,150,200,250OpenCV 用途生成灰度渐变条遍历像素、测试颜色1.5 np.random.randint () —— 随机数noise np.random.randint(0, 255, (480,640), dtypenp.uint8)np.random.randint(0, 255, (高度, 宽度))意思就是在 0~255 之间随便乱填数字填出一个高 × 宽的数字矩阵。因为数字对应颜色乱填数字 乱填颜色 雪花噪点OpenCV 用途给图像加噪声测试算法鲁棒性2. 查看数组信息必须会2.1 .shape —— 看图像大小最重要img cv2.imread(test.jpg) print(img.shape)(480, 640, 3)意思480 行高 H640 列宽 W3 通道彩色OpenCV 用途裁剪、放缩、画框都要先看尺寸判断是彩色还是灰度图2.2 .ndim —— 看维度print(img.ndim)3 → 彩色2 → 灰度用途判断图像类型2.3 .dtype —— 看数据类型print(img.dtype) # uint8图像永远是 uint8计算时会转 float32。3. 索引与切片OpenCV 核心3.1 取一个像素pixel img[y, x]返回[b, g, r]用途取某个点颜色鼠标点击取色3.2 切片截取一块区域ROI 超级常用roi img[100:300, 200:400]img[ 起始行 : 结束行 , 起始列 : 结束列 ] img[ y1:y2 , x1:x2 ]OpenCV 用途截人脸区域截车牌局部处理只模糊某一块# 把人脸区域模糊 face img[100:300, 200:400] face cv2.blur(face, (20,20)) img[100:300, 200:400] face3.3 取整行 / 整列img[y, :] # 第 y 行所有像素 img[:, x] # 第 x 列所有像素用途画线、扫图检索颜色4. 修改数组4.1 给一块区域上色img[10:100, 10:100] [0, 0, 255] # 蓝色矩形用途画色块、标记区域4.2 .copy () —— 复制图像必用img2 img.copy()千万不要直接写img2 img # 这不是复制是别名一改全改用途保留原图在副本上画图对比处理前后效果4.3 reshape () —— 改变形状a np.arange(24).reshape(4, 6)OpenCV 用途把图像拉成一维做直方图模型输入前整理形状5. 数据类型只记两个5.1 uint8 —— 图像本身0~255所有图片默认都是它5.2 float32 —— 计算时用边缘检测、傅里叶变换、深度学习输入img_float img.astype(np.float32)6. 拼接图像6.1 hstack 左右拼接combined np.hstack((img1, img2))6.2 vstack 上下拼接combined np.vstack((img1, img2))用途同时显示原图与效果图做对比界面总结你学 OpenCV 只需要掌握np.zeros创建黑图.shape看宽高通道img[y1:y2, x1:x2]截区域img[y,x]取 / 改像素.copy()复制图像uint8存图float32计算hstack/vstack拼图
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2482430.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!