裁剪图像的黑边(图像拼接后的黑边去除)
生活随笔
收集整理的這篇文章主要介紹了
裁剪图像的黑边(图像拼接后的黑边去除)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考鏈接:https://www.cnblogs.com/yumoye/p/10512540.html
累計多張圖像拼接后,黑邊會累計增加,為了去除圖像拼接后的黑邊,截取有用的區域,參考博客代碼如下:
"""author:youngkun;date:20180608;function:裁剪照片的黑邊"""import cv2 import os import datetimedef change_size(read_file):image=cv2.imread(read_file,1) #讀取圖片 image_name應該是變量img = cv2.medianBlur(image,5) #中值濾波,去除黑色邊際中可能含有的噪聲干擾b=cv2.threshold(img,15,255,cv2.THRESH_BINARY) #調整裁剪效果binary_image=b[1] #二值圖--具有三通道binary_image=cv2.cvtColor(binary_image,cv2.COLOR_BGR2GRAY)print(binary_image.shape) #改為單通道x=binary_image.shape[0]print("高度x=",x)y=binary_image.shape[1]print("寬度y=",y)edges_x=[]edges_y=[]for i in range(x):for j in range(y):if binary_image[i][j]==255:edges_x.append(i)edges_y.append(j)left=min(edges_x) #左邊界right=max(edges_x) #右邊界width=right-left #寬度bottom=min(edges_y) #底部top=max(edges_y) #頂部height=top-bottom #高度pre1_picture=image[left:left+width,bottom:bottom+height] #圖片截取return pre1_picture #返回圖片數據source_path="./training_data/1/" #圖片來源路徑 save_path="./out/" #圖片修改后的保存路徑if not os.path.exists(save_path):os.mkdir(save_path)file_names=os.listdir(source_path)starttime=datetime.datetime.now() for i in range(len(file_names)):x=change_size(source_path + file_names[i]) #得到文件名cv2.imwrite(save_path+file_names[i],x)print("裁剪:",file_names[i])print("裁剪數量:",i)while(i==2600):break print("裁剪完畢") endtime = datetime.datetime.now()#記錄結束時間 endtime = (endtime-starttime).seconds print("裁剪總用時",endtime)利用原始代碼,修改文件路徑可以跑通,但是耗時比較長,尺寸(17196,6155)的圖片耗時102s,研究代碼發現for循環的目的是提取白色像素點,可以用np.where優化,優化后速度提升明顯,耗時4s,代碼如下:
import cv2 import numpy as np import datetimedef change_size(read_file):image = cv2.imread(read_file, 1) # 讀取圖片 image_name應該是變量img = cv2.medianBlur(image, 5) # 中值濾波,去除黑色邊際中可能含有的噪聲干擾b = cv2.threshold(img, 15, 255, cv2.THRESH_BINARY) # 調整裁剪效果binary_image = b[1] # 二值圖--具有三通道binary_image = cv2.cvtColor(binary_image, cv2.COLOR_BGR2GRAY)print(binary_image.shape) # 改為單通道indexes = np.where(binary_image == 255) # 提取白色像素點的坐標left = min(indexes[0]) # 左邊界right = max(indexes[0]) # 右邊界width = right - left # 寬度bottom = min(indexes[1]) # 底部top = max(indexes[1]) # 頂部height = top - bottom # 高度pre1_picture = image[left:left + width, bottom:bottom + height] # 圖片截取return pre1_picture # 返回圖片數據if __name__=='__main__':source_file = "/mnt/input.jpg" # 原始圖片save_path = "/mnt/out.jpg" # 裁剪后圖片starttime = datetime.datetime.now()x = change_size(source_file)cv2.imwrite(save_path, x)print("裁剪完畢")endtime = datetime.datetime.now() # 記錄結束時間endtime = (endtime - starttime).secondsprint("裁剪總用時", endtime)總結
以上是生活随笔為你收集整理的裁剪图像的黑边(图像拼接后的黑边去除)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV入门(C++/Python)
- 下一篇: 【虚幻引擎】UE4/UE5科大讯飞文字合