У меня есть двоичное изображение, и мне нужно найти средние значения x и y черной области. Эти значения вычисляются для набора двоичных изображений, а их средние значения x и y построены. Я не знаю, как найти эту область и рассчитать их средние значения x и y. Любую помощь любезно оценивают.Найти среднее положение черных пикселей с использованием python
ответ
Если черные пиксели не зарегистрированы в некоторой структуре данных, просто вычислить центр масс для черных пикселей:
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
Я получаю' IndexError: индекс 255 находится вне границ для оси 0 с размером 200' эта ошибка – karthik
Так что вы написали неправильный цикл – MBo
то, что вы имеете в виду неправильной цикла 'им = CV2 .imread ('v6.tif', 0) RET, молоти = cv2.threshold (им, 120, 255, 1) а = Len (им) печати молоти B = A + 2 = SX 0 SY = 0 blackc = 0 для й в интервале (а): для у в диапазоне (а): пикселей = Im [х, у] , если пиксель == 0: = SX + X SX SY = с + y blackc + = 1 print blackc cv2.waitKey() 'Я делаю это – karthik
Вы можете получить средние позиции, используя моменты контуров.
Чтобы найти среднее значение, вы должны вычислить моменты первого порядка контура.
КОД:
#---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
Значение cX
и cY
имеет средние позиции контуров.
I устал этот метод, и я получаю 'контуры, hierarchy = cv2.findContours (thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) ValueError: слишком много значений для распаковки этой ошибки – karthik
использование 'cv2.moments' – Miki