zoukankan      html  css  js  c++  java
  • 剪切图片

    总体思路为:读取各个文件夹里面的图片,根据自己的选择,将自己想要得到的头像的颜色,通过opencv剪切下来,并且根据这个文件夹的名字生成相对应的文件来装图片,图片的名字是根据时间戳来确定的

    下面是代码:

    import cv2
    import os
    import time

    # 分类器,设置为全局变量
    face_cascade = cv2.CascadeClassifier("D:\face_data\opencv_testing_mechanism\da_face\haarcascade_frontalface_alt.xml")
    size_data = 64 #将他默认为64大小的
    save_add = "D:\face_data\black_photo"

    def read_address():
    # 读取地址,并且根据相对应的需求修改图片
    target_add = "D:\face_data\many_photo"
    # 读取文件夹
    floder_name_list = os.listdir(target_add)
    # print(floder_name_list)
    for floder_name in floder_name_list:
    floder_add_str = target_add +"\"+ floder_name
    # 创建图片的地址
    save_floder_add = save_add+"\"+ floder_name
    isExist = os.path.exists(save_floder_add)
    if not isExist:
    os.makedirs(save_floder_add)
    else:
    print("文件已经存在了")
    return
    print(floder_name+"设置成黑白的头像或者彩色的头像")
    demand_data = input(floder_name+"设置成黑白头像的输入black,设置成彩色的头像的输入colour:")
    if demand_data=="black":
    modify_photo_black_and_white(floder_add_str,save_floder_add)
    if demand_data=="colour":
    modify_photo_colour(floder_add_str,save_floder_add)
    if demand_data != "black" and demand_data != "colour":
    print("请重新输入正确的需求")
    while(1):
    demand_data = input(floder_name + "设置成黑白头像的输入black,设置成彩色的头像的输入colour:")
    if demand_data == "black":
    modify_photo_black_and_white(floder_add_str,save_floder_add)
    break
    elif demand_data == "colour":
    modify_photo_colour(floder_add_str,save_floder_add)
    break
    else:
    print("请重新输入正确的需求!")
    return


    def modify_photo_black_and_white(floder_add_str,save_floder_add):
    # 将图片修改为黑白图片

    # 读取文件里面的所有的图片的地址
    photo_name_list = os.listdir(floder_add_str)
    # print(photo_name_list)

    # 通过循环设置图片的大小和灰度
    for photo_name in photo_name_list:
    photo_name_add = floder_add_str+"\"+photo_name
    # print(photo_name_add)
    photo_data = cv2.imread(photo_name_add)
    # print(photo_data)
    intercept_photo(photo_data,save_floder_add)
    return

    def intercept_photo(photo_data,save_floder_add):
    # 剪切成黑白色的
    gray = cv2.cvtColor(photo_data,cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray,1.3,5)
    for (x,y,w,h) in faces:
    face = cv2.resize(gray[y:(y+h),x:(x+w)],(size_data,size_data))
    # print(face)
    save_photo(face,save_floder_add)



    def modify_photo_colour(floder_add_str,save_floder_add):
    print("将图片修改为彩色的图片")
    # 读取文件里面的所有的图片的地址
    photo_name_list = os.listdir(floder_add_str)
    # print(photo_name_list)

    # 通过循环设置图片的大小和灰度
    for photo_name in photo_name_list:
    photo_name_add = floder_add_str + "\" + photo_name
    # print(photo_name_add)
    photo_data = cv2.imread(photo_name_add)
    # print(photo_data)
    intercept_photo_color(photo_data, save_floder_add)
    return

    def intercept_photo_color(photo_data, save_floder_add):
    # 这个是剪切诚彩色的
    gray = cv2.cvtColor(photo_data, cv2.COLOR_BGR2BGRA)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x, y, w, h) in faces:
    face = cv2.resize(gray[y:(y + h), x:(x + w)], (size_data, size_data))
    # print(face)
    save_photo(face, save_floder_add)

    def save_photo(face,save_floder_add):
    # 保存图片
    photo_name = str(int(time.time()))
    cv2.imwrite(save_floder_add+"\"+photo_name+".jpg",face)

    if __name__ == "__main__":
    str_size_data = input("请输入您想要生成的图片的大小像素,注意必须是整数:")
    try:
    size_data = int(str_size_data)
    except ValueError:
    print("请输入整数")
    while (1):
    str_size_data = input("请输入您想要生成的图片的大小像素,注意必须是整数:")
    try:
    size_data = int(str_size_data)
    except ValueError:
    print("请输入整数")
    else:
    break
    read_address()








  • 相关阅读:
    ssh免密码登录
    nginx做负载均衡+keepalived(做主备)
    centos之Too many open files问题-修改linux最大文件句柄数
    redis-JedisPoolConfig配置
    Hadoop端口说明
    hadoop 2.5 安装部署
    Java集合框架 10 连问,你有被问过吗?
    Dubbo面试八连问,这些你都能答上来吗?
    面试官:关于Java性能优化,你有什么技巧
    Docker从入门到掉坑(三):容器太多,操作好麻烦
  • 原文地址:https://www.cnblogs.com/MyUniverse/p/10667832.html
Copyright © 2011-2022 走看看