Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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 OpenCV或Numpy中的对比度拉伸与限制和空白_Python_Numpy_Opencv - Fatal编程技术网

Python OpenCV或Numpy中的对比度拉伸与限制和空白

Python OpenCV或Numpy中的对比度拉伸与限制和空白,python,numpy,opencv,Python,Numpy,Opencv,我一直在对对比度拉伸进行尽职调查,但有一个特殊情况 如果你有一个像素值在3到248之间的图像,但是你只想拉伸,比如说,105到135,10到255之间的像素,然后将低于10的像素归零,那么最有效的方法是什么 我目前的工作方法如下。在OpenCV或Numpy中,有没有更好的方法或内置函数是我缺少的 我知道OpenCV处理加法/减法/多重应用的方式略有不同: " 。。。我想知道这样是否会更有效率 # raw_image has these limits for intensity m

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

如果你有一个像素值在3到248之间的图像,但是你只想拉伸,比如说,105到135,10到255之间的像素,然后将低于10的像素归零,那么最有效的方法是什么

我目前的工作方法如下。在OpenCV或Numpy中,有没有更好的方法或内置函数是我缺少的

我知道OpenCV处理加法/减法/多重应用的方式略有不同:

"

。。。我想知道这样是否会更有效率

    # 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)
#原始图像的强度有以下限制
最小值=3
最大值=248
#将此范围调整为105-->10和135-->255
#小于105的值为零,大于255的值为255
最小放大倍数=105
最大缩放=135
#减去min_x_zoom,使其为零
正在处理的图像=np.减法(原始图像,最小x缩放)
#缩放所需范围
正在处理的图像=np.multiply(正在处理的图像,浮点((255.0-10.0)/(最大缩放-最小缩放)))
#所有像素加10;值现在将为10到255,但是,有些值可能小于10
正在处理的图像=np.add(正在处理的图像,10.0)
#如果该值小于10,则将其设为零

image_being_processed=np。其中(image_being_processed您当然不需要在这么多行中执行此操作。如果数组已经是一个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
您还可以实现第一行,如下所示:

im_norm = (cv2.normalize(im,None,105,135,cv2.NORM_MINMAX)-105)/(135-105)
希望这能给你一些想法。

考虑制作一个LUT“查找表”,并将其应用于一行。
result=LUT[image]
请参见