【发布时间】:2020-07-28 01:29:09
【问题描述】:
- 我必须读取一张 RGB 图像
- 那么我需要选择一个 ROI
- 之后,我需要使用简单的方法从整个图像中测量 ROI 的色差 颜色分割(不使用 HSV 图像,要求我将 RGB 转换为 Lab 图像)
- 输出为,ROI 突出显示,背景为灰色。
- 需要使用python进行简单的deltaE色差颜色分割。
- 颜色分割后,蒙版中可能存在多个对象。
-
然后我被指示分析 ROI 的深度并根据深度对 ROI 进行分段 投资回报率的价值。 但是在这里也不可能在整个图像上获得 deltaE。 请帮忙,我非常需要它。
我要处理这张图片,从这里我需要分割手势部分: [在此处输入图片说明][1]
[1]:https://i.stack.imgur.com/nGA42.jpg
到目前为止,我已经编写了代码: ''''
# Open image and make Numpy arrays 'rgb' and 'lab' pic = imageio.imread('E:\JU_V2_DIGIT\RGB_Crop\RGB_P7_G0_8.png') pic2 = pic.copy() # Determine the shape of the image total_row, total_col, layers = pic2.shape mask= np.zeros_like(pic2) x,y = np.ogrid[:total_row, :total_col] # Transform in lab picture Lab_pic = color.rgb2lab(pic) L_pic, A_pic, B_pic = cv2.split(Lab_pic) cv2.imshow("L_Channel", L_pic) # For L Channel cv2.imshow("A_Channel", A_pic) # For A Channel cv2.imshow("B_Channel", B_pic) # For B Channel cen_x, cen_y = total_row/2, total_col/2 distance_from_center = np.sqrt((x-cen_x+10)**2+(y-cen_y-15)**2) radius = (total_row/3) circular_pic = distance_from_center>radius pic2[circular_pic] = 0 pic2[mask] = 0 #cv2.imwrite('D:\SHROUTI\Testpictures\opencvmasking_human.jpg',dst) cv2.imshow("cir_mask",pic2) Lab = color.rgb2lab(pic2) #getting mean value for the mask region L_mask,A_mask,B_mask = cv2.split(Lab) cv2.imshow("L_Channel_mask", L_mask) # For L Channel cv2.imshow("A_Channel_mask", A_mask) # For A Channel cv2.imshow("B_Channel_mask", B_mask) # For B Channel LMean = L_mask.mean() AMean = A_mask.mean() BMean = B_mask.mean() # getting delta values DeltaL = L_pic-LMean DeltaA = A_pic- AMean DeltaB = B_pic - BMean DeltaE = np.sqrt(pow(DeltaA,2)+pow(DeltaB,2)+pow(DeltaL,2)) print(DeltaE) cv2.imshow("deltaE",DeltaE) cv2.waitKey()''' 它显示了一个完整的白色输出图像。我不知道该怎么做。请帮忙
【问题讨论】:
-
为什么要使用多个图像处理库?为什么不在opencv中打开并转换图像呢?
-
除了显示问题,请考虑重新阅读问题描述。您的实现表明您可能并不真正理解它的要求。例如,为什么要计算整个图像的平均值?您只需要 ROI 的平均值
标签: python opencv image-processing euclidean-distance