python实现像素值的转换,以下代码有什么错误



黑白的图片,想要将白色处的像素值改成1,写了如下代码,但是最终的文件输出得到的并不是自己想要的结果,该怎么改

你把图片po上来...把代码也po上来

import matplotlib.pyplot as plt

import matplotlib.image as mpimg

import numpy as np

import os

from os.path import split,splitext

from PIL import Image


filenames = os.listdir('label_z')

file_path = 'label_z/'

output_dir = 'npyz'

for i,file_name in enumerate(filenames):

    img = Image.open(file_path + file_name)

    img_arr = np.array(img)

    for index, element in np.ndenumerate(img_arr):

        if element != 0 :

            element = 1

        else:

            pass

    fpath = os.path.join(output_dir,splitext(file_name)[0]+'.npy')

    np.save(fpath, img_arr)

下面的是把npy转成图片的代码

import glob

import torch

import shutil

import datetime

import numpy as np

from PIL import Image

from tqdm import tqdm

from os.path import split,splitext


filenames = os.listdir('npyz')

file_path = 'npyz/'

output_dir = 'mask_z'

for i,file_name in enumerate(filenames):

    mask = np.load(file_path + file_name)

    fpath = os.path.join(output_dir,splitext(file_name)[0]+'.png')

    mask = Image.fromarray(mask.astype(np.uint8))

    mask.save(fpath)

预期实现输出应该是全黑的

mask.putpixel((i,j),(255,255,255))

mask = img.convert("RGB")

maks.save(path)

我是单通道的图

是要使得图片的像素值只有0和1,8位深度

是上面那张黑白的图片要把白色处的像素值改为1

from PIL import Image

import PIL.ImageOps   

import numpy as np

from skimage.io import imsave

import cv2



in_path = 'old.bmp'

out_path = 'new.png'



Image = cv2.imread(in_path)

Image2 = np.array(Image, copy=True)


white_px = np.asarray([255, 255, 255])

#这里可以改成你期望的颜色

black_px = np.asarray([0 , 0 , 0 ])


(row, col, _) = Image.shape


for r in range(0,row):

   for c in range(0,col):

       px = Image[r][c]

       if all(px == white_px):

           Image2[r][c] = black_px


imsave(out_path, Image2)


这个还是三通道的

我之前写的代码应该是可以改的,只是里面有点小问题,没有成功赋值

可以帮我看一眼我图片下面的代码,生成npy的那个,问题出在哪里

for i,file_name in enumerate(filenames):
    img = Image.open(file_path + file_name)
    img_arr = np.array(img)
    for j in img_arr:
        for k in j:
            for l in k:
                l = 1;
            print(k)
    fpath = os.path.join(file_path,splitext(file_name)[0]+'.npy')
    np.save(fpath, img_arr)
 这样根本赋不了值

。。。可以的



已解决

有一行代码没注意写错了

 还有 你确定你的处理图像不是小黄图?2333.

???

我要把标签转成自己想要的mask

上面是胰腺的标签

胰腺也能引动人的欲望吗???

 并不是...我只是觉得形似...2333

(;一_一)