Android小白 2022-04-22 16:05 采纳率: 20%
浏览 19
已结题

保存的每一张图片里面都显示好多张图片的内容,是代码哪块的问题啊各位

import cv2
import multiprocessing
import os
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
def get_img(input_dir):
img_paths = []
for (path,dirname,filenames) in os.walk(input_dir):
for filename in filenames:
img_paths.append(path+'/'+filename)
print("img_paths:",img_paths)
return img_paths

def tran(img_paths,output_dir):
imread_failed = []

try:
    #img = cv2.imread(img_paths)
    img = Image.open(img_paths)
    pic = img.convert('RGBA') # 转为RGBA模式
    #print("哈哈哈哈哈哈")
    width,height = pic.size
    #print("哈哈哈哈哈哈")
    array = pic.load() # 获取图片像素操作入口
    for i in range(width):
        for j in range(height):
            pos = array[i,j] # 获得某个像素点,格式为(R,G,B,A)元组
            # 如果R G B三者都大于240(很接近白色了,数值可调整)
            isEdit = (sum([1 for x in pos[0:3] if x <= 0]) == 3)
            if isEdit:
                # 更改为透明
                array[i,j] = (255,255,255,0)


    #cv2.imwrite(output_dir + '/' + img_paths.split('/')[-1], pic)
    plt.imshow(pic, cmap=plt.cm.gray)
    # plt.axis('off')
    plt.savefig(output_dir + '/' + img_paths.split('/')[-1] + ".tiff")
    # pic.save("output_dir + '/' + img_paths.split('/')[-1].tiff")
    # cv2.waitKey(0)
    # cv2.destroyAllWindows()
except:
    imread_failed.append(img_paths)
return imread_failed

def main(input_dir,output_dir):
img_paths = get_img(input_dir)
scale = len(img_paths)

results = []
pool = multiprocessing.Pool(processes = 4)
for i,img_path in enumerate(img_paths):
    a = "#"* int(i/10)
    b = "."*(int(scale/10)-int(i/10))
    c = (i/scale)*100
    results.append(pool.apply_async(tran, (img_path,output_dir )))
    print('{:^3.3f}%[{}>>{}]'.format(c, a, b)) # 进度条(可用tqdm)
pool.close()                        # 调用join之前,先调用close函数,否则会出错。
pool.join()                         # join函数等待所有子进程结束
for result in results:
    print('image read failed!:', result.get())
print ("All done.")

if name == "main":
input_dir = "G:/aml/new/finalfile/train/LYA/" # 读取图片目录表
output_dir = "G:/aml/new/tran_bg/train/LYA/" # 保存图像目录
main(input_dir, output_dir)

img


我想要的是一张图片只有一个细胞,但生成了n个细胞一张图,不知道是代码哪里出问题了哎

  • 写回答

1条回答 默认 最新

  • 不会长胖的斜杠 后端领域新星创作者 2022-04-22 16:14
    关注

    你用的
    plt.savefig(output_dir + '/' + img_paths.split('/')[-1] + ".tiff")
    这个把你的图一起保存了,这一块放到for循环去

    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月15日
  • 专家已采纳回答 5月7日
  • 创建了问题 4月22日

悬赏问题

  • ¥20 有偿,学生成绩信息管理系统
  • ¥15 Arduino电机和openmv连接异常
  • ¥15 Arcgis河网分级报错
  • ¥200 java+appium2.1+idea
  • ¥20 请帮我做一个EXE的去重TXT文本
  • ¥15 工价表引用工艺路线,应如何制作py和xml文件
  • ¥15 根据历史数据,推荐问题类型
  • ¥15 需要仿真图,简单的二阶系统实例
  • ¥15 stm32光控照明仿真
  • ¥15 使用人工智能的方法生成满足一定统计参数要求的随机数序列