Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t在OpenCV/Scikit image/TIFF文件中加载tif图像/拆分tif图像_Python_Opencv_Scikit Image - Fatal编程技术网

Python Can';t在OpenCV/Scikit image/TIFF文件中加载tif图像/拆分tif图像

Python Can';t在OpenCV/Scikit image/TIFF文件中加载tif图像/拆分tif图像,python,opencv,scikit-image,Python,Opencv,Scikit Image,我目前正在尝试用python加载一个.TIF文件,然后将其保存为RGB和NIR图像 这是我使用/尝试的代码: %matplotlib notebook import tifffile as tiff import cv2 from matplotlib import pyplot as plt import skimage.io import numpy as np import os def load_images_from_folder(folder): images = []

我目前正在尝试用python加载一个.TIF文件,然后将其保存为RGB和NIR图像

这是我使用/尝试的代码:

%matplotlib notebook

import tifffile as tiff
import cv2
from matplotlib import pyplot as plt
import skimage.io
import numpy as np
import os
def load_images_from_folder(folder):
    images = []
    for filename in os.listdir(folder):
        img = None
        print(filename)
        if filename.endswith('.TIF'):
            img = cv2.imread(os.path.join(folder,filename), -1)
            #img = tiff.imread(os.path.join(folder,filename))
            #img = skimage.io.imread(os.path.join(folder,filename), plugin='tifffile')
        if img is not None:
            images.append(img)
            b,g,r,nir = cv2.split(img)
            image_rgb = np.stack([b,g,r], axis=2)

            nir_normalized = cv2.normalize(nir,None,0,255,cv2.NORM_MINMAX)
            image_rgb_normalized = cv2.normalize(image_rgb,None,0,255,cv2.NORM_MINMAX)

            skimage.io.imsave("satellite_imagery_split/" + filename[:-4] + "_nir_normalized.png", np.array(nir_normalized, dtype = np.uint8 )) 
            skimage.io.imsave("satellite_imagery_split/" + filename[:-4] + "_rgb_normalized.png", np.array(image_rgb_normalized, dtype = np.uint8 ))
            cv2.imwrite("satellite_imagery_split/" + filename[:-4] + "_nir_normalized.png", np.array(nir_normalized, dtype = np.uint8 )) 
            cv2.imwrite("satellite_imagery_split/" + filename[:-4] + "_rgb_normalized.png", np.array(image_rgb_normalized, dtype = np.uint8 ))

    return images

images = load_images_from_folder('satellite_imagery/')
但没有任何变化能正常工作。 使用OpenCV,图像上到处都是奇怪的条形图:

如果tiff图像和scikit图像具有这种奇怪的颜色效果:

我用上面的代码尝试了不同的组合,但没有给出正确的结果。 但非常奇怪的是,对于一些图像(20个图像中的2个),结果与预期一致,因此RGB和NIR图像看起来是正确的,但是对于所有其他图像,我都经历了这种奇怪的行为


谁能告诉我我做错了什么,因为我也用Adobe Lightroom打开了所有图像,所有原始的四通道图像看起来都是正确的。

这些图像看起来像是一个或多个字节偏移错误。tif文件标准是灵活的(因被不同的公司违反而臭名昭著),并且您的图像源可能会对文件头做一些奇怪的事情。若你们仔细观察,“颜色效应”是由于三个通道的错位造成的,绿色和蓝色通道逐渐向顶部w.r.t移动,红色通道。如果lightroom仍然可以很好地读取图像,那么我会使用它重新导出它们。ImageJ将是另一个选项,它也将支持批处理。如果这不是一次性作业,并且ImageJ/Fiji不切割它,我将分叉
TIFFILE
,并创建自己的自定义读取器,能够处理文件头中发生的任何奇怪情况
TIFF文件
的源代码可读性很好,在我们的实验室中,我们创建了多个分叉来处理滥用标头并在分析过程中导致下游问题的不同显微镜图像源。请共享一个TIFF文件,我来看看。谷歌“Mark Setchell photography”,如果电子邮件对你来说更容易,你会找到我的电子邮件地址-请添加一个链接到这个问题,这样我就知道它与什么有关了。