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

Tlya

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

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

  • Посещение

Сообщения, опубликованные пользователем Tlya


  1. Здравствуйте!

    Объясните пожалуйста. Все источники пишут, что метод matchShapes() используется в купе с моментами, но каким образом если он в качестве параметров принимает только списки контуров и метод? :huh: И как их туда запихнуть?

    И если получится их применить, то какие моменты надо использовать, чтобы получить независимость от масштаба и поворота? (центральных или Hu-моментов?)

    п.с. Интересная статья) Большая часть про моменты, а потом берут и для сравнения используют просто список контуров :) http://robocraft.ru/blog/computervision/867.html


  2. так мне ж не все непонятно, затуп конкретно буквально в нескольких строках:

    import cv2
    import numpy as np  //что за numpy?
    from matplotlib import pyplot as plt // as plt?
    
    //дальше понятное дело считывание, перевод в грей, изменение размера
    
    res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED) // тоже всё ясно
    threshold = 0.8 // визуал предлагает либо cvThreshold либо threshold
    loc = np.where( res >= threshold) //конструкция с перебором массива я так понимаю... как ее изобразить на ++
    for pt in zip(*loc[::-1]): // откуда взялся zip
    cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2) //рисуем квадрат

    п.с. я же не все 6 дней сидел и думал над этим)) просто вспомнил на днях))


  3. Нашел по вашим ссылкам нужный код, но не получается перевести его на С++ :unsure:

    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    
    img_rgb = cv2.imread('mario.png')
    img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
    template = cv2.imread('mario_coin.png',0)
    w, h = template.shape[::-1]
    
    res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
    threshold = 0.8
    loc = np.where( res >= threshold)
    for pt in zip(*loc[::-1]):
    cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)

     


  4. Здравствуйте!
    такой вопрос: создал прилагу по поиску фрагмента на картинке по шаблону

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    
    #define  CV_TM_SQDIFF        0
     
    #include<opencv2\highgui\highgui.hpp>
    #include<opencv2\core\core.hpp>
    #include<opencv2\opencv.hpp>
    #include<opencv\cv.h>
    #include<stdio.h>
     
    using namespace cv;
    using namespace std;
     
    double minval, maxval;
     
    int main(int argc, const char** argv)
    {
        setlocale(LC_ALL, "Russian");
     
        string ishod_im = "TEST.jpg";
        char ish_is[100];
        strcpy(ish_is, ishod_im.c_str());
        IplImage* image = 0;
        image = cvLoadImage(ish_is, 1);
     
        string shablon_im = "X.jpg";
        char ish_sh[100];
        strcpy(ish_sh, shablon_im.c_str());
        IplImage* templ = 0;
        templ = cvLoadImage(ish_sh, 1);
        
        int width = templ->width;
        int height = templ->height;
        IplImage *res = cvCreateImage(cvSize((image->width - templ->width + 1), (image->height - templ->height + 1)), IPL_DEPTH_32F, 1);
        cvMatchTemplate(image, templ, res, CV_TM_SQDIFF);
        CvPoint minloc, maxloc;
        cvMinMaxLoc(res, &minval, &maxval, &minloc, &maxloc, 0);
        cvRectangle(image, cvPoint(minloc.x, minloc.y), cvPoint(minloc.x + templ->width - 1, minloc.y + templ->height - 1), CV_RGB(0, 0, 255), 2, 8);
        cvShowImage("Совпадения", image);
        waitKey(0);
        return 0;
    }

    С большего все работает норм, интересует два вопроса:
    1. как сделать так чтобы находило более одного совпадения? (вроде как есть какой-то способ "скользящего окна", но хотелось бы знать как его реализовать. а может и не им надо пользоваться)
    2. как сделать чтобы в случае отсутствия совпадения не показывал ни одной рамки (сейчас прога ищет совпадения, но даже если адекватных нет выдает хоть какой-то результат (неверный))

×