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、增加行与列相关推荐

  1. Numpy数组中删除指定位置、指定行或指定列的数据:numpy.delete()

    [小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] Numpy数组中删除指定位置.指定行 或指定列的数据: numpy.delete() [太阳 ...

  2. 34.35.热图(heatmap)、创建带注释的热图、使用辅助函数的代码样式、图像显示、图像插值、将图像数据导入Numpy数组、将numpy数组绘制为图像

    34.热图(heatmap) 34.1.创建带注释的热图 34.2.使用辅助函数的代码样式 35.图像显示 35.1.图像插值 35.2.将图像数据导入Numpy数组 35.3.将numpy数组绘制为 ...

  3. python数组索引和切片_python numpy数组的索引和切片的操作方法

    NumPy - 简介 NumPy 是一个 Python 包. 它代表 "Numeric Python". 它是一个由多维数组对象和用于处理数组的例程集合组成的库. Numeric, ...

  4. 将Numpy数组保存为图像

    有一个Numpy数组类型的矩阵,如何将它作为图像写入磁盘?任何格式的图像都行(PNG,JPEG,BMP ...). 最佳解决办法 可以使用scipy.misc,代码如下: import scipy.m ...

  5. python用numpy生成图片并保存_python 实现将Numpy数组保存为图像

    python 实现将Numpy数组保存为图像 第一种方案 可以使用scipy.misc,代码如下: import scipy.misc misc.imsave('out.jpg', image_arr ...

  6. OpenCV-Python根据鼠标点击位置截取ROI

    OpenCV-Python根据鼠标点击位置截取ROI 文章目录 OpenCV-Python根据鼠标点击位置截取ROI 前言 一.实现过程 1.引入库 2. 获取鼠标位置 使用方法 实例展示 前言 基于 ...

  7. numpy数组切片:一维/二维/数组

    文章目录 numpy数组切片操作 一维数组(冒号:) 1.一个参数:a[i] 2.两个参数:b=a[i:j] 3.三个参数:格式b = a[i:j:s] 4.例子 二维数组(逗号,) 取元素 X[n0 ...

  8. pybind11向C++ dll 传递数组 图像

    python 通过pybind11向C++ dll 传递数组 图像 传递python中的List pybind11 很贴心地帮你把 vector<T> 跟 python 的 list 做好 ...

  9. Intel Realsense D435 python (Python Wrapper)example00: NumPy Integration 将深度帧数据转换为 Numpy 数组进行处理

    NumPy Integration: Librealsense frames support the buffer protocol. A numpy array can be constructed ...

最新文章

  1. PE文件和COFF文件格式分析——导出表
  2. python输入语句-Python中的模块导入和读取键盘输入的方法
  3. 机器学习(七)——tf.keras搭建神经网络固定模式
  4. 《高性能JavaScript》第六章 快速响应的用户界面
  5. Python 直接赋值、浅拷贝和深度拷贝解析
  6. [ASP]没有权限: 'CreateObject'
  7. mysql的Innodb为什么使用B+树
  8. ES6------Set结构
  9. BZOJ1370 [Baltic2003]Gang团伙
  10. Tomcat:JAVA_HOME should point to a JDK not a JRE解决
  11. gateface php,XAMPP下载-Xampp(PHP环境套件)V8.01 官方win版-ucbug软件站
  12. 货物列车尾部安全防护装置
  13. html5 mediarecorder,用浏览器轻松录制音频、视频—— MediaRecorder API
  14. U盘和移动硬盘不能安全删除问题及解决方案
  15. 软件包管理:rpm和yum
  16. 利用nsca监控oracle的session数
  17. 接口自动化——one
  18. 常用dos命令(五)--DEL和ERASE命令
  19. python爬取图片_python批量爬取网络图片
  20. 2023真无线蓝牙耳机哪个品牌好?蓝牙耳机怎么选?高性价比蓝牙耳机推荐指南!

热门文章

  1. 视频动作定位的分层自关注网络:ICCV2019论文解析
  2. java显示当月数据_Java统计当月与往月数据 使用StringTemplate
  3. C++ #if、#elif、#else和#endif指令 的使用
  4. java.lang.NullPointerException: Attempt to invoke virtual method ‘boolean java.lang.String.equals(j
  5. html style属性
  6. Project evaluation failed including an error in afterEvaluate {}. Run with --stacktrace for details
  7. android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating cl
  8. Linux 用户行为日志记录
  9. 创建一个Scalar-valued Function函数来实现LastIndexOf
  10. jq--ajax中止请求