Numpy数组图像基本操作方法,及截取ROI、增加行与列
Numpy数组截取ROI,增加列、行
- 1)图片基本操作:读写、显示、缩放、旋转
- 2)截取ROI,为图片增加行、列
- 参考
图片在Numpy数组中使用ndarry表示的。
比如分辨率: 400 * 500的一张图,想为边缘增加黑色边框怎么整呢,想轻松的截取图片怎么整呢?都是对数组的操作;
1)图片基本操作:读写、显示、缩放、旋转
- 图片的读取
- 显示
- 写入
- 缩放(保持宽高比与不保持宽高比的)
- 旋转(丢失图片信息的和不丢失的)
缩放效果图:保持宽高比 VS 不保持宽高比
imutil.resize 保持宽高比
cv2.resize 不保持宽高比,可以看到二维码有点变形了;
旋转效果图:不丢失图片信息 VS 丢失图片信息imutils.rotate_bound 不会丢失
imutils.rotate 同 cv2.warpAffine都会丢失信息,如下图
import cv2
import imutils
import numpy as np# 读取图片,cv2.imread 默认3通道BGR图,若想读取png透明图,则需要指定 cv2.IMREAD_UNCHANGED
# image = cv2.imread("/images/bycycle.png", cv2.IMREAD_UNCHANGED)
img = cv2.imread('./images/b11.jpg')
img1 = cv2.imread('./images/bars2.jpg')# 图片显示
cv2.imshow("origin", img)
cv2.waitKey(0)# 图片缩放
# imutils.resize保持宽高比,cv2.resize保持宽高比
cv2.imshow("keep ratio", imutils.resize(img1, width=300))
cv2.waitKey(0)
cv2.imshow('not keep ratio', cv2.resize(img1, (300, 200), interpolation=cv2.INTER_AREA))
cv2.waitKey(0)img = img[230:, :500]
cv2.imshow("origin img", img)
cv2.waitKey(0)# 图片旋转
# imutils.rotate 同 cv2.warpAffine 都会丢失
# imutils.rotate_bound 不会丢失
cv2.imshow("imutils.rotate_bound not lose ", imutils.rotate_bound(img, 60))
cv2.waitKey(0)
cv2.imshow("imutils.rotate lose", imutils.rotate(img, 60))
cv2.waitKey(0)
(h, w) = img.shape[:2]
center = (w / 2, h / 2)
M = cv2.getRotationMatrix2D(center, 60, 1.0)
rotated = cv2.warpAffine(img, M, (w, h))
cv2.imshow("cv2.warpAffine lose", rotated)
cv2.waitKey(0)
2)截取ROI,为图片增加行、列
顶部增加行效果图(顶部黑色部分为增加行)
左侧增加列效果图(黑色部分为增加列)
import cv2
import numpy as npimg = cv2.imread('./images/b11.jpg')
# M * N
img = img[:400, :500] # 数组切片获取ROI
cv2.imshow("ROI",img)
cv2.waitKey(0)black = 0 # 增加列的颜色,改为255改为白色col = np.ones((50, img.shape[0], 3))# M * (5+N) 左侧+50列黑色
img_left = np.insert(img, 0, col * black, axis=1)
cv2.imshow("img_left", img_left)
cv2.waitKey(0)# M * (N+5) 右侧+50列黑色
img_right = np.insert(img, img.shape[1], col * black, axis=1)
cv2.imshow("img_right", img_right)
cv2.waitKey(0)# (50+M) * N 上边+50列
row = np.ones((50, img.shape[1], 3))
img_top = np.insert(img, 0, row * black, axis=0)
cv2.imshow("img_top", img_top)
cv2.waitKey(0)# (M+50) * N 底部+50列
img_bottom = np.insert(img, img.shape[0], row * black, axis=0)
cv2.imshow("img_bottom", img_bottom)
cv2.waitKey(0)
cv2.destroyAllWindows()
参考
- https://www.bbsmax.com/A/QV5ZqObJyb/
Numpy数组图像基本操作方法,及截取ROI、增加行与列相关推荐
- Numpy数组中删除指定位置、指定行或指定列的数据:numpy.delete()
[小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] Numpy数组中删除指定位置.指定行 或指定列的数据: numpy.delete() [太阳 ...
- 34.35.热图(heatmap)、创建带注释的热图、使用辅助函数的代码样式、图像显示、图像插值、将图像数据导入Numpy数组、将numpy数组绘制为图像
34.热图(heatmap) 34.1.创建带注释的热图 34.2.使用辅助函数的代码样式 35.图像显示 35.1.图像插值 35.2.将图像数据导入Numpy数组 35.3.将numpy数组绘制为 ...
- python数组索引和切片_python numpy数组的索引和切片的操作方法
NumPy - 简介 NumPy 是一个 Python 包. 它代表 "Numeric Python". 它是一个由多维数组对象和用于处理数组的例程集合组成的库. Numeric, ...
- 将Numpy数组保存为图像
有一个Numpy数组类型的矩阵,如何将它作为图像写入磁盘?任何格式的图像都行(PNG,JPEG,BMP ...). 最佳解决办法 可以使用scipy.misc,代码如下: import scipy.m ...
- python用numpy生成图片并保存_python 实现将Numpy数组保存为图像
python 实现将Numpy数组保存为图像 第一种方案 可以使用scipy.misc,代码如下: import scipy.misc misc.imsave('out.jpg', image_arr ...
- OpenCV-Python根据鼠标点击位置截取ROI
OpenCV-Python根据鼠标点击位置截取ROI 文章目录 OpenCV-Python根据鼠标点击位置截取ROI 前言 一.实现过程 1.引入库 2. 获取鼠标位置 使用方法 实例展示 前言 基于 ...
- numpy数组切片:一维/二维/数组
文章目录 numpy数组切片操作 一维数组(冒号:) 1.一个参数:a[i] 2.两个参数:b=a[i:j] 3.三个参数:格式b = a[i:j:s] 4.例子 二维数组(逗号,) 取元素 X[n0 ...
- pybind11向C++ dll 传递数组 图像
python 通过pybind11向C++ dll 传递数组 图像 传递python中的List pybind11 很贴心地帮你把 vector<T> 跟 python 的 list 做好 ...
- Intel Realsense D435 python (Python Wrapper)example00: NumPy Integration 将深度帧数据转换为 Numpy 数组进行处理
NumPy Integration: Librealsense frames support the buffer protocol. A numpy array can be constructed ...
最新文章
- PE文件和COFF文件格式分析——导出表
- python输入语句-Python中的模块导入和读取键盘输入的方法
- 机器学习(七)——tf.keras搭建神经网络固定模式
- 《高性能JavaScript》第六章 快速响应的用户界面
- Python 直接赋值、浅拷贝和深度拷贝解析
- [ASP]没有权限: 'CreateObject'
- mysql的Innodb为什么使用B+树
- ES6------Set结构
- BZOJ1370 [Baltic2003]Gang团伙
- Tomcat:JAVA_HOME should point to a JDK not a JRE解决
- gateface php,XAMPP下载-Xampp(PHP环境套件)V8.01 官方win版-ucbug软件站
- 货物列车尾部安全防护装置
- html5 mediarecorder,用浏览器轻松录制音频、视频—— MediaRecorder API
- U盘和移动硬盘不能安全删除问题及解决方案
- 软件包管理:rpm和yum
- 利用nsca监控oracle的session数
- 接口自动化——one
- 常用dos命令(五)--DEL和ERASE命令
- python爬取图片_python批量爬取网络图片
- 2023真无线蓝牙耳机哪个品牌好?蓝牙耳机怎么选?高性价比蓝牙耳机推荐指南!
热门文章
- 视频动作定位的分层自关注网络:ICCV2019论文解析
- java显示当月数据_Java统计当月与往月数据 使用StringTemplate
- C++ #if、#elif、#else和#endif指令 的使用
- java.lang.NullPointerException: Attempt to invoke virtual method ‘boolean java.lang.String.equals(j
- html style属性
- Project evaluation failed including an error in afterEvaluate {}. Run with --stacktrace for details
- android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating cl
- Linux 用户行为日志记录
- 创建一个Scalar-valued Function函数来实现LastIndexOf
- jq--ajax中止请求