Numpy数组图像基本操作方法,及截取ROI、增加行与列
生活随笔
收集整理的這篇文章主要介紹了
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、增加行与列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows10 C盘爆满如何清理
- 下一篇: 使用Pyhthon,OpenCV和ZBa