我有这个图像要处理,从这里我需要分割手势部分:在这里输入图像描述
1:https://i.stack.imgur.com/nGA42.jpg
我已经编写了这么远的代码:‘开放图像并使Numpy数组'rgb’和' lab‘pic = imageio.imread('E:\JU_V2_DIGIT\RGB_Crop\RGB_P7_G0_8.png') pic2 = pic.copy() #确定图像的形状total_row,total_col,layers = pic2.shape mask= np.zeros_like(pic2) x,y= np.ogrid:total_row,:total_col # Transform in lab图片Lab_pic = color.rgb2lab(pic) L_pic,A_pic,B_pic =cv2.拆分(Lab_pic) cv2.imshow("L_Channel",L_pic) #用于L频道cv2.imshow("A_Channel",A_pic) #用于A频道cv2.imshow("B_Channel",B_pic) #用于B频道cen_x,cen_y = total_row/2,#cv2.imwrite('D:\SHROUTI\Testpictures\opencvmasking_human.jpg',_ distance_from_center /2 distance_from_center= np.sqrt((x-cen_x+10)**2+(y-cen_y-15)**2)半径=(**2+_row/3) circular_pic = distance_from_center>radius pic2circular_pic =0 pic2mask =0 circular_pic) cv2.imshow("cir_mask",pic2) Lab = color.rgb2lab(pic2) #获取掩码区L_mask,A_mask,B_mask = cv2.split(Lab) cv2.imshow("L_Channel_mask",L_mask) #用于L频道cv2.imshow("A_Channel_mask",A_mask) #用于频道cv2.imshow("B_Channel_mask",# For B Channel LMean = L_mask.mean() AMean = A_mask.mean() BMean = B_mask.mean() #For增量值DeltaL = L_pic-LMean DeltaA = A_pic- AMean DeltaB = B_pic - BMean DeltaE =B_pic-BMean DeltaE=LMean( DeltaE) cv2.imshow("deltaE",DeltaE)cv2.waryKey()‘’它显示了一个完整的白色输出图像。我不知道该怎么做。请帮助
发布于 2020-04-15 07:49:21
您的DeltaE显示为白色,因为您将值低于230的float64数组放入cv2.imshow()
它期望所有的值都在0,1之内。在您的例子中,每个值>= 1都变成255,因此输出图像都是白色的。
normalized = cv2.normalize(DeltaE, None, 0, 1, cv2.NORM_MINMAX)或
normalized = cv2.normalize(DeltaE, None, 0, 255, cv2.NORM_MINMAX, dtype = cv2.CV_8U)要获得DeltaE的规范化版本,您可以在没有问题的情况下显示该版本。
解决这个问题的方法是点击谷歌第一次点击“不显眼的白色”。
我不明白你为什么会为此使用三个不同的图像处理库。
OpenCV满足了您的所有需求。
将pic = imageio.imread('E:\JU_V2_DIGIT\RGB_Crop\RGB_P7_G0_8.png')替换为
pic = cv2.imread('E:\JU_V2_DIGIT\RGB_Crop\RGB_P7_G0_8.png')
Lab_pic = color.rgb2lab(pic)使用
Lab = cv2.cvtColor(pic2, cv2.COLOR_BGR2Lab)等等..。
不需要冒奇怪的风险,因为一个库在BRG中工作,而另一个库在RGB或其他地方工作。以防万一你想知道为什么你的rgb图像看起来如此怪异。
https://stackoverflow.com/questions/61222616
复制相似问题