Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (2)

Наибольший вклад в теги

Все теги (41)

Лучшие ответы пользователя

Все ответы (52)
  • Как включить многоядерную компиляцию в QT Creator на Linux?

    @D3Nd3R
    Project->Build->Build steps->Make arguments
    для gcc задается путем указания флага: -jN (где N число потоков)
    Ответ написан
    1 комментарий
  • Python Как обрезать изображения?

    @D3Nd3R
    Дополню ответ Aleksey Solovyev.
    1. Переводим в чб.
    2. На бинарном изображении (вместо cv2.Canny необходимо применить cv2.threshold, так как цвет рамки - белый то подобрать порог будет нетрудно) необходимо найти внешний контур (cv2.findContours с параметром RETR_EXTERNAL) и затем останется сохранить часть изображения, которая лежит внутри контура.
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/core/core.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <algorithm>
    
    int main(int argc, char *argv[])
    {
    	cv::Mat img,gr,th;
    	img = cv::imread("1.jpg");
    	cv::cvtColor(img, gr, cv::COLOR_BGR2GRAY);
    	
    	cv::threshold(gr, th, 240.0, 255, cv::THRESH_BINARY);
    
    	std::vector<std::vector<cv::Point> > contours;
    	cv::findContours(th, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE);
    
    	auto max_vector_comp = [](std::vector<cv::Point> &lhs,
    		std::vector<cv::Point> &rhs)
    	{
    		return lhs.size() < rhs.size();
    	};
    	//поиск самого длинного контура
    	auto maxVector = std::max_element(contours.begin(), contours.end(),
    		max_vector_comp);
    	//находим описывающий прямоугольник
    	cv::Rect roi = cv::boundingRect(*maxVector);
    
    	cv::Mat croppedImg;
    	croppedImg = img(roi);
    	cv::imshow("inImg", img);
    	cv::imshow("croppedImg", croppedImg);
    	cv::waitKey();
    	return 0;
    }
    Ответ написан
    3 комментария
  • Какая математика используется в компьютерном зрении?

    @D3Nd3R
    Я рекомендую прочитать книгу: www.ozon.ru/context/detail/id/19898948 . В ней изложены основные методы ЦОИ и даны формулы.
    А математика зависит от конкретной задачи, но действительно очень многое из университетского курса высшей математике может понадобиться. Также следует обратить внимание на дискретную математику.
    Ответ написан
    Комментировать
  • Поиск сдвига одного изображения относительно другого?

    @D3Nd3R
    Если необходимо вычислить только сдвиг, то используйте phaseCorrelate. Если необходимо вычислить поворот и сдвиг, то алгоритм действия такой:
    1. если изображения прямоугольные, то вырезаем квадрат по меньшей стороне. Затем умножаем на окно Ханна (createHanningWindow);
    2. вычисляем дпф;
    3. вычисляем логарифм амплитудных спектров;
    4. переводим получившиеся изображения в полярную систему координат; https://www.youtube.com/watch?v=JZRSDDzTwts&ab_cha...
    5. используя phaseCorrelate получаем оценку поворота (сдвиг по OY, если память не изменяет);
    6. поворачиваем исходное изображения;
    7. с помощью phaseCorrelate находим сдвиг;
    Ответ написан
    Комментировать
  • Как удалить элемент вектора внутри цикла?

    @D3Nd3R
    Можно все сделать и без цикла:
    contours.erase(std::remove_if(contours.begin(), contours.end(),
    		[this](std::vector<cv::Point> vec)->bool
                             {return vec.size() < this->mParams.minContourSize; })
    		,contours.end());
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (13)