2017-02-09 30 views
0

我有一个二进制图像,我需要找到黑色区域的x和y的平均值。这些值是为一组二进制图像计算的,它们的x和y的平均值被绘制出来,我不知道如何找到这个区域并计算它们的x和y的平均值。任何帮助表示感谢。使用python查找blackpixels的平均位置

enter image description here

+0

使用'cv2.moments' – Miki

回答

1

如果黑色像素不在某些数据结构登记,才算质量中心为黑色像素:

sx = 0 
sy = 0 
black_cnt = 0 
for y in y-range 
    for x in x-range 
    if black(x,y) 
      sx = sx + x 
      sy = sy + y 
      black_cnt++ 

sx = sx/black_cnt 
sy = sy/black_cnt 
+0

我得到'IndexError:指数255是出界对轴0,大小200'此错误 – karthik

+0

所以你写错周期 – MBo

+0

你的错了循环的意思,'IM = CV2 .imread( 'v6.tif',0) RET,脱粒= cv2.threshold(1M,120,255,1) 一个LEN =(IM) 打印脱粒 b = A + 2 SX = 0 SY = 0 blackc = 0 对于x在范围(a)中: y的范围内的(a): 像素= IM [X,Y] 如果像素== 0: SX = SX + X SY = SY + y blackc + = 1个 打印blackc cv2.waitKey()'我您正在使用'有效范围内的(a)中,同时'x应在范围(宽度)和y在范围(高度) – karthik

0

您可以获取使用轮廓的时刻的平均位置。

为了找到平均值,您必须计算轮廓的一阶矩。

CODE:

#---Read image and obtain threshold--- 
im = cv2.imread('1.jpg', 1) 
img = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) 
ret, thresh = cv2.threshold(img, 120, 255, 1) 

#---Obtain contours--- 
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 
cnts = contours 
cv2.drawContours(im, contours, -1, (0, 255, 0), 1) 

#---Compute the center/mean of the contours--- 
for c in cnts: 
    M = cv2.moments(c) 
    cX = int(M["m10"]/M["m00"]) 
    cY = int(M["m01"]/M["m00"]) 
    print cX 
    print cY 

价值观cXcY有轮廓的平均位置。

+0

我X这样 – karthik