程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python opencv 圖像去黑邊

編輯:Python

筆者看了很多使用python來給圖像去黑邊的做法,他們幾乎都會使用for循環來遍歷大量像素,這對於python操作來說是非常低效的。

為此,斗膽提出了如下的算法:
1、找到圖像中心點,並獲取中心點所在橫和縱的全部像素
2、使用numpy的向量化操作,比較橫或縱像素點與黑邊阈值的大小
3、找到上述比較結果中各處為True的結果,即為去除黑邊後的圖像邊界

效果如下圖所示:

實現代碼

import cv2
import numpy as np
threshold = 40 # 阈值
gray = cv2.imread('./bgRemovedTEst.png') # 導入圖片
gray = cv2.cvtColor(gray, cv2.COLOR_RGB2GRAY) # 轉換為灰度圖像
nrow = gray.shape[0] # 獲取圖片尺寸
ncol = gray.shape[1]
rowc = gray[:,int(1/2*nrow)] # 無法區分黑色區域超過一半的情況
colc = gray[int(1/2*ncol),:]
rowflag = np.argwhere(rowc > threshold)
colflag = np.argwhere(colc > threshold)
left,bottom,right,top = rowflag[0,0],colflag[-1,0],rowflag[-1,0],colflag[0,0]
cv2.imshow('name',gray[left:right,top:bottom]) # 效果展示
cv2.waitKey()

優點與改進空間

這樣做的優點是顯而易見的,代碼邏輯清晰明了,且沒有使用for循環效率極高,時間復雜度是o(n),對於尋常圖像大小比傳統做法快了100倍的樣子。

但是上述例程沒有辦法處理黑邊范圍超過一半的情況。為此可以將手動取中心點作為分界線,改成隨機取點,直到該點不為黑邊為止。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved