OpenCV. Как получить координаты углов контура?
Дается случайное изображение с черным фоном и белым квадратом на нем. Нужно найти центр квадрата.
Есть такой код
import cv2 as cv
image = get_img()
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
contours, hierarchies, _ = cv.findContours(gray, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE)
centres = []
for i in contours:
moment = cv.moments(i)
if moment["m00"] != 0:
x = int(moment['m10']/moment['m00'])
y = int(moment['m01']/moment['m00'])
else: continue
centres.append(x)
centres.append(y)
print(centres)
Впринципе он работает, но работает с готовыми изображениями. Проблема в том, что изображение генерируется через функцию get_image(). Допустим генерируется квадрат с центро: в точке 200 200. Сейчас код начинает вести себя странно на этапе считывания моментов. Он находит кучу моментов 0 и 200, соответственно x и y получаются равны 0 и 200 и так много раз.
Можно ли как-то упросить эту функцию или есть ли более надежная? Я начал изучать openCV пару дней назад с надобностью и скорее всего неверно понял как работают моменты...
Ответы (2 шт):
Поиск чего-то в opencv работает не так как ожидатся. То есть зачастую возвращаются правильные результаты,- те на которые и рассчитывает разработчик. Но, так же часто возвращаются неверные результаты, которые к сожалению ни как нельзя проверить. Если суть задачи только в поиске белого квадрата, то проще напрямую работать с пикселями.