去除图像黑边的操作其实蛮简单的,主要是定位黑边的长度和宽度。
我是在网上搜一个人的代码搜到的,其实有些地方没有理解,也觉得可以更简单,先占坑,后面再改。
给大家放个完整代码。我放的是对一张图片进行处理。后面看看,改一下再放一个对文件夹里所有图片进行处理的。
import cv2
import os
source_path="D:\\DATASET\\gan_picture\\emily\\step1\\6500.jpg"
image = cv2.imread(source_path)
b=cv2.threshold(image,15,255,cv2.THRESH_BINARY) #调整裁剪效果
binary_image=b[1] #二值图--具有三通道
binary_image=cv2.cvtColor(binary_image,cv2.COLOR_BGR2GRAY)
#cv2.imwrite("D:\\emily_6500.jpg", binary_image)
#print(binary_image.shape) #改为单通道
row=binary_image.shape[0] #row指行,第几行,也就是height
#print("高度x=",x)
column=binary_image.shape[1] #column指列,第几列,也就是width
#print("宽度y=",y)
edges_row=[]
edges_column=[]
for i in range(row): #逐个判断
for j in range(column):
if binary_image[i][j]==255: #255表示白色
# print("横坐标",i)
# print("纵坐标",j)
edges_row.append(i)
edges_column.append(j)
#print(edges_x)
#print(edges_y)
bottom=min(edges_row) #底部
#print(bottom)
top=max(edges_row) #顶部
#print(top)
left=min(edges_column)
#print(left) #左边界
right=max(edges_column)
#print(right) #右边界
pre2_picture=image[bottom:top,left:right]
cv2.imwrite("D:\\emily_65004.jpg", pre2_picture)
这段代码的意思呢,是先找到黑边的像素位置,然后直接重置图片,只要没有黑边的像素部分。
其中有一个点。像素点是从屏幕左上角开始,所以,上面是bottom,下面是top,开始是left,结束是right。
如果觉得有用的话,给我点赞留言吧~