python double函数_OpenCV Python中的等价im2double函数

我将避免使用旧的cv模块,而是使用cv2,因为它们使用numpy数组。numpy数组的操作与MATLAB中的数组和矩阵非常相似。

在任何情况下,^{}在MATLAB中对图像进行规格化,使最小强度为0,最大强度为1。如果给定图像的像素img,则可以通过以下关系实现:out = (in - min(img)) / (max(img) - min(img))

因此,您需要找到图像的最小值和最大值,并将上述操作应用于图像中的每个像素。在多通道图像的情况下,我们会找到所有通道上的全局最小值和最大值,并将相同的操作独立应用于所有通道。

对您的问题的简短回答是使用^{}如下:out = cv2.normalize(img.astype('float'), None, 0.0, 1.0, cv2.NORM_MINMAX)

第一个输入是源图像,我们将其转换为float。第二个输入是输出图像,但我们将其设置为None,因为我们希望函数调用返回该值。第三个和第四个参数指定要在输出中显示的最小值和最大值,分别为0和1,最后一个输出指定要如何规范化图像。我所描述的属于NORM_MINMAX标志。

你的另一个问题是关于阅读图像。要用cv2读入图像,请使用^{}。此函数的输入是一个包含要加载的文件的字符串。因此,您可以这样调用上面的函数:img = cv2.imread('....') # Read image here

out = cv2.normalize(img.astype('float'), None, 0.0, 1.0, cv2.NORM_MINMAX) # Convert to normalized floating point

但是,如果您想自己编写一些东西,我们可以使用numpy操作轻松完成。

因此,将函数编写为:import cv2

import numpy as np

def im2double(im):

min_val = np.min(im.ravel())

max_val = np.max(im.ravel())

out = (im.astype('float') - min_val) / (max_val - min_val)

return out

然后你会像这样使用代码:img = cv2.imread('...') # Read in your image

out = im2double(img) # Convert to normalized floating point

编辑-2016年9月29日

最新版本的MATLAB现在只需将所有数字除以该数据类型支持的最大值。例如,对于uint8,最大值为255,而对于uint16,最大值为65535。

如果您想在最新版本的MATLAB中重新实现它,可以使用^{}函数来推断数据类型的最小值和最大值,并相应地进行转换。只需访问最大的值并将图像中的所有元素除以此数字即可。请确保首先将图像转换为浮点表示:import cv2

import numpy as np

def im2double(im):

info = np.iinfo(im.dtype) # Get the data type of the input image

return im.astype(np.float) / info.max # Divide all values by the largest possible value in the datatype

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值