gpt4 book ai didi

python - OpenCV 或 Numpy 中的对比拉伸(stretch),具有限制和消隐

转载 作者:太空宇宙 更新时间:2023-11-03 19:59:58 24 4
gpt4 key购买 nike

我一直在对对比度拉伸(stretch)进行尽职调查,但有一个特殊情况。

如果您有一个像素值从 3 到 248 的图像,但您只想拉伸(stretch)范围为 105 到 135、10 到 255 的像素,并将低于 10 的像素归零,那么可能会出现什么情况?最有效的方法来做到这一点?

我当前有效的方法如下。在 OpenCV 或 Numpy 中是否有更好的方法或我缺少的内置函数?

我知道 OpenCV 处理加法/减法/乘法的方式略有不同:

OpenCV image subtraction vs Numpy subtraction '

...并且想知道这是否会更有效。

    # raw_image has these limits for intensity
min=3
max=248

# scale this range so 105-->10, and 135-->255
# anything less than 105 is zero, anything greater than 255 is 255
min_x_zoom = 105
max_x_zoom = 135

# subtract off min_x_zoom, making it zero
image_being_processed=np.subtract(raw_image,min_x_zoom)

# scale that desired range
image_being_processed = np.multiply(image_being_processed , float((255.0 - 10.0) / (max_x_zoom - min_x_zoom)))

# add 10 to all pixels; values will now be 10 to 255, however, some might be less than 10
image_being_processed=np.add(image_being_processed,10.0)

# if the value is less than 10, make it zero
image_being_processed=np.where(image_being_processed<10,0,image_being_processed)

# clip image, so we don't go outside the range of 0 to 255
image_being_processed=np.clip(image_being_processed,0,255)

# convert to integers for display purposes
image_being_processed = np.array(image_being_processed, dtype = np.uint8)

最佳答案

您当然不需要在这么多行中执行此操作。如果数组已经是 numpy 数组,您也不需要在数组上使用所有这些 numpy 函数。使用 + 和 - 等运算符已经意味着使用标量进行数组加法和减法。试试这个:

# this scales the image values between 105 and 135 to 0 and 1:
im_clip = (np.clip(im,105,135) - 105)/(135 - 105)

# This takes 1 to 255 and 0 to 10
im_scale = (im_clip*(255-10)) + 10

您还可以使用 openCV's normalize function 来实现第一行,像这样:

im_norm = (cv2.normalize(im,None,105,135,cv2.NORM_MINMAX)-105)/(135-105)

希望这能给您一些想法。

关于python - OpenCV 或 Numpy 中的对比拉伸(stretch),具有限制和消隐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59310131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com