首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >skimage.transform.rotate:保存时获取全黑图像

skimage.transform.rotate:保存时获取全黑图像
EN

Stack Overflow用户
提问于 2018-05-05 04:34:45
回答 1查看 1.8K关注 0票数 4

我正在使用python 3.6,并在图像上执行以下功能(读取图像,填充图像,裁剪图像,旋转图像)。我正在使用skimage或基本的python函数。如果我不旋转图像,就不会有任何警告。但如果我旋转图像,我会收到以下警告

/anaconda3/lib/python3.6/site-packages/skimage/util/dtype.py:122: UserWarning:从int64转换为float64 .format时可能的精度损失(dtypeobj_in,dtypeobj_out)

当我尝试使用imshow查看图像时,图像值似乎在(1e-17) (https://ibb.co/cSfzb7)的范围内。我猜图像值在某个地方被归一化了,但我找不到位置。

如果我尝试保存旋转后的图像,我得到的是一张完全黑色的图像。

im = img_as_uint(image)
imsave(image_path, im, plugin='imageio')

我尝试删除img_as_uint,使用默认的imsave,使用(freeimage,imagio)作为插件选项

/anaconda3/lib/python3.6/site-packages/skimage/util/dtype.py:122: UserWarning:从int64转换为float64 .format时可能的精度损失(dtypeobj_in,dtypeobj_out)

/anaconda3/lib/python3.6/site-packages/skimage/util/dtype.py:122: UserWarning:从float64转换为uint16 .format时可能的精度损失(dtypeobj_in,dtypeobj_out)

/anaconda3/lib/python3.6/site-packages/skimage/io/_io.py:132:名称: /Users/ashisharora/google_Drive/madcat_arabic/lines/AAW_ARB_20061105.0017-S1_1_LDC0372_00z1.png是低对比度图像警告(‘%s是低对比度图像’% fname)

import sys
import argparse
import os
import numpy as np
import matplotlib
matplotlib.use('TkAgg')
import skimage
from skimage.io import imread, imsave, imshow
from skimage.transform import rotate
from skimage import img_as_uint

im_wo_pad = imread(image_file_name) 
im = pad_image(im_wo_pad) 
region_initial = im[281:480, 2509:4766] 
rotation_angle_in_rad = -0.00708 
img2 = rotate(region_initial, degrees(rotation_angle_in_rad)) 
region_final = img2[15:298, 7:2263] 
imshow(region_final)


def pad_image(image):
    offset = 200
    max_val = 255
    height = image.shape[0]
    im_pad = np.concatenate((max_val * np.ones((height, offset),
                                        dtype=int), image), axis=1)
    im_pad1 = np.concatenate((im_pad, max_val * np.ones((height, offset),
                                                 dtype=int)), axis=1)

    width = im_pad1.shape[1]

    im_pad2 = np.concatenate((max_val * np.ones((offset, width),
                                         dtype=int), im_pad1), axis=0)
    im_pad3 = np.concatenate((im_pad2, max_val * np.ones((offset, width),
                                                  dtype=int)), axis=0)
    return im_pad3

我尝试了发布在堆栈溢出上的解决方案,但它不适用于我的情况。如果有人能帮上忙,我将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2018-07-18 04:28:23

默认情况下,skimage旋转函数会转换为浮点数,并在0和1之间缩放图像值。(请参见http://scikit-image.org/docs/dev/api/skimage.transform.html#skimage.transform.rotate)

尝试使用preserve_range参数和一些类型转换,例如,

img_rot = skimage.transform.rotate(img, rot_angle, preserve_range=True).astype(np.uint8)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50182691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档