zoukankan      html  css  js  c++  java
  • 利用python,opencv来去除图像的黑边(上下左右都有黑边的)

    利用python,opencv来去除图像的黑边(上下左右都有黑边的)

    """author:youngkun;date:20180608;function:裁剪照片的黑边"""
     
    import cv2
    import os
    import datetime
     
    def 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)

    这种方法只能裁剪出矩形的图像,具有一定的局限性,利用了opencv的二值化来分离出前景和背景

    完整代码请见
    https://github.com/younkun/image_image-processing.git

  • 相关阅读:
    调用Android自带日历功能
    android使用全局变量传递数据
    安卓高手之路之java层Binder
    无刷新实时获得数据
    Android画图之抗锯齿
    android 定时器的实现
    将apk文件添加到Android模拟器(AVD)中运行
    Android 屏幕自适应方向尺寸
    经常用得到的安卓数据库基类
    android系统特效详解和修改方法
  • 原文地址:https://www.cnblogs.com/yumoye/p/10512540.html
Copyright © 2011-2022 走看看