问题描述
我需要将图像转换为 HSV。我使用了 OpenCV 库,但是当我运行我的算法时,出现以下警告:
RuntimeWarning: overflow encountered in ubyte_scalars
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 (将#修改为@)