Как выбрать определенные части равномерно окрашенного рисунка в openCV Python?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

0
задан An Amateur 14 April 2019 в 05:27
поделиться

1 ответ

Вот код. Он использует грубые линии для обнаружения линий, а не просто обрезает области изображения, заданные линиями

img = cv2.imread('PECross.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
lines_coords = []
edges = cv2.Canny(gray, 50,150,3)
lines = cv2.HoughLines(edges,1,np.pi/180,200)
for rho,theta in lines.squeeze():
    a = np.cos(theta)
    b = np.sin(theta)
    x0 = a*rho
    y0 = b*rho
    x1 = int(x0 + 1000*(-b))
    y1 = int(y0 + 1000*(a))
    x2 = int(x0 - 1000*(-b))
    y2 = int(y0 - 1000*(a))
    lines_coords.append((x1,y1,x2,y2))
vertical_left = lines_coords[0]
vertical_right = lines_coords[1]
horizontal_up = lines_coords[2]
horizontal_down = lines_coords[3]

x1,y1,x2,y2=vertical_left
left_arm = img[:, :x1]

x1,y1,x2,y2=vertical_right
right_arm = img[:, x1:]

x1,y1,x2,y2=horizontal_up
upper_arm = img[:y1, :]

x1,y1,x2,y2=horizontal_down
lower_arm = img[y1:, :]

cv2.imwrite('left_arm.png', left_arm)
cv2.imwrite('right_arm.png', right_arm)
cv2.imwrite('upper_arm.png', upper_arm)
cv2.imwrite('lower_arm.png', lower_arm)
0
ответ дан M.Yousuf 14 April 2019 в 05:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: