我怎样才能避免溢出?

问题描述

我需要将图像转换为 HSV。我使用了 OpenCV 库,但是当我运行我的算法时,出现以下警告:

RuntimeWarning: overflow encountered in ubyte_scalars

我想计算两个 HSV 像素之间的距离。我实现了这个功能

def distance(pixel1,pixel2):
    h1,s1,v1 = pixel1[0],pixel1[1],pixel1[2]
    h2,s2,v2 = pixel2[0],pixel2[1],pixel2][2]
    dh = abs(h1 - h2) / 179
    ds = abs(s1 - s2) / 255
    dv = abs(v1 - v2) / 255
    distance = math.sqrt(dh ** 2 + ds ** 2 + dv ** 2) / math.sqrt(3)
return distance

当我执行以下代码时,由于溢出,结果不正确。在某些情况下,距离大于 1.0,这不应该发生。

  import cv2
  import math
  import numpy as np
  #threshold value in range (0,1]
  threshold = 0.7689
  image1 = cv2.imread("image1.jpg")
  image2 = cv2.fastNlMeansDenoisingColored(image1,None,10,7,21)
  image3 = cv2.cvtColor(image2,cv2.COLOR_BGR2HSV)
  w,h,c = image3.shape
  binary_image = np.zeros((w,h),dtype= int)
  # extract one pixel from image
  pixel1 = image3[w//2][h//2]
  for i in range(w):
      for j in range(h):
         distance = distance(pixel1,image3[i][j])
         if distance > threshold:
             binary_image[i][j] = 1
         else:
             binary_image[i][j] = 0

我在阅读图片后尝试进行以下更改

image4 = np.array(image3,dtype = 'float64')

如果我更改数组的类型,距离会变得非常小(

如何更改代码以避免溢出?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)