Перейти к содержимому
Compvision.ru

pnp2000

Пользователи
  • Количество публикаций

    9
  • Зарегистрирован

  • Посещение

Репутация

0 Новичек

О pnp2000

  • Звание
    Новичок
  1. Вобщем в проблеме float я разобрался, и всё вроде даже работает, но только если я сравниваю фигуры на одной картинке, при сравнении с другой картинкой возвращает нули, с чем это может быть связанно???? # !/opt/local/bin/python2.7 # -*- coding: cp1251 -*- """Чтобы не ругался на русские коментарии""" import cv,cv2,numpy in_image = cv.LoadImage('/Users/test_img2.jpg') match_image = cv.LoadImage('/Users/test_sample_img.jpg') in_gray = cv.CreateImage(cv.GetSize(in_image),cv.IPL_DEPTH_8U, 1 ) in_binary = cv.CreateImage(cv.GetSize(in_image),cv.IPL_DEPTH_8U, 1 ) in_out = cv.CreateImage(cv.GetSize(in_image),cv.IPL_DEPTH_8U, 1 ) match_gray = cv.CreateImage(cv.GetSize(match_image),cv.IPL_DEPTH_8U, 1 ) match_binary = cv.CreateImage(cv.GetSize(match_image),cv.IPL_DEPTH_8U, 1 ) match_out = cv.CreateImage(cv.GetSize(match_image),cv.IPL_DEPTH_8U, 1 ) cv.CvtColor(in_image,in_gray,cv.CV_RGB2GRAY) cv.CvtColor(match_image,match_gray,cv.CV_RGB2GRAY) #cv.InRangeS(in_gray,cv.Scalar(20),cv.Scalar(230),in_binary) cv.Canny (in_gray, in_binary, 150 , 250 , 3) cv.Canny (match_gray, match_binary, 150 , 200 , 3) in_storage = cv.CreateMemStorage(0) match_storage = cv.CreateMemStorage(0) #находим контуры и моменты in_contours = cv.FindContours(in_binary,in_storage,cv.CV_RETR_TREE,cv.CV_CHAIN_APPROX_SIMPLE ,(0,0)) in_moments = cv.Moments(in_contours) match_contours = cv.FindContours(match_binary,match_storage,cv.CV_RETR_TREE,cv.CV_CHAIN_APPROX_SIMPLE ,(0,0)) match_moments = cv.Moments(match_contours) in_contours_ = match_contours while in_contours!= None: cv.DrawContours(in_image,in_contours,cv.CV_RGB(0,250,0), cv.CV_RGB(0,250,0),2) cv.DrawContours(in_out,in_contours,cv.CV_RGB(250,250,0), cv.CV_RGB(0,250,250),2) match_ = cv.MatchShapes(in_contours,in_contours_ , cv.CV_CONTOURS_MATCH_I3) #cv.Circle(in_image,in_contours,20,cv.CV_RGB(255,0,0),1,8,0) print in_contours in_contours = in_contours.h_next() match_contours while match_contours!= None: cv.DrawContours(match_image,match_contours,cv.CV_RGB(0,250,0), cv.CV_RGB(0,250,0),2) match_contours = match_contours.h_next() #Создаем окна и показываем в них изображения cv.NamedWindow('Original',cv.CV_WINDOW_AUTOSIZE) cv.MoveWindow('Original',0,40) cv.NamedWindow('Gray',cv.CV_WINDOW_AUTOSIZE) cv.MoveWindow('Gray',200,40) cv.NamedWindow('Contours',cv.CV_WINDOW_AUTOSIZE) cv.MoveWindow('Contours',0,280) cv.NamedWindow('Binary',cv.CV_WINDOW_AUTOSIZE) cv.MoveWindow('Binary',200,280) cv.NamedWindow('Match_Contours',cv.CV_WINDOW_AUTOSIZE) cv.MoveWindow('Match_Contours',400,280) cv.ShowImage('Original',in_image) cv.ShowImage('Gray',in_gray) cv.ShowImage('Contours',in_out) cv.ShowImage('Binary',in_binary) cv.ShowImage('Match_Contours',match_image) #print in_moments cv.WaitKey(0)
  2. Вобщем попробовал совать контуры но один хрен ничего не получается, я непонимаю как этот MatchShapes работает, у меня уже вообще такое чусвство что это dummy функция и она вообще непашет в принципе
  3. Вот и я о том же, я хоть и не силён в питоне но пока более менее разбирался с тем функциями которые пробовал, а в эту просто упёрся и немогу понять что не так
  4. сделал mat_mask = cv.GetMat(mask) mat_grayscale = cv.GetMat(grayscale) MatchShapes = cv.MatchShapes(mat_mask, mat_grayscale, cv2.cv.CV_CONTOURS_MATCH_I2, None) всё-равно тоже самое, и как на зло примеров на питоне нету, чтобы хоть посмотреть как это должно работать
  5. Вот попытался попробовать с cv.MatchShapes capture = cv.CaptureFromCAM(0) mask_xgo = cv.LoadImage('go.jpg') while True: frame = cv.QueryFrame(capture) image_size = cv.GetSize(frame) grayscale = cv.CreateImage(image_size, 8, 1) image_size_mask = cv.GetSize(mask_xgo) mask = cv.CreateImage(image_size_mask, 8, 1) cv.SetZero(grayscale) cv.SetZero(mask) cv.CvtColor(frame, grayscale, cv.CV_BGR2GRAY); cv.CvtColor(mask_xgo, mask, cv.CV_BGR2GRAY); MatchShapes = "2342.34" float(MatchShapes) MatchShapes = cv.MatchShapes(mask, grayscale, cv.CV_CONTOURS_MATCH_I2, None) всёвремя вываливается в TypeError: 'a float is required' ужк блин незнаю что нетак делаю
  6. Наверно да, в принципе ситуация похожая главное чтобы чтоб зработало под питоном, а то я недавно нашёл интересную функцию в OpenCV ,а под питоном она не реализованна , но тут по беглому изучению кода вроде проблем не должно быть, спасибо за инфу, будет чем занять выходные
  7. да пока натурного макета нету и картинки пока тоже нету, я вот только не понимаю может ли matchShapes или MatchContours работать с контурами если они могут сдвигаться на произвольный угол
  8. да я уже тоже начал тоже думать что MatchTemplate не самый лучший вариант, как я понимаю MatchTemplate это простое побитовое вычитание массива до тех пор пока сумма всех значений не станет равна нулю, пойду покурю matchShapes , а то получается любой поворот фигуры и она уже не определяется MatchTemplate'ом
  9. Вобщем есть такая задачка, надо на столе находить объекты и классифицировать их в соответствии базой, грубо говоря на столе есть несколько листов бумаги разных форм и размеров, надо с достаточно большой точностью (не более 0,5-1vv) найти их положение, в принципе камера находится на фиксированном расстоянии от стола и размеры искомых объектов есть, делаю всё на питоне, как я понимаю тут подходит cvMatchTemplate, или тут нужен другой подход, читал про распознание фигур но если фигура не меняет угла и расстояние то по видимому cvMatchTemplate будет работать быстрее и надёжнее, или я не прав??? просто только недавно начал мучать питона и opencv
×